在编写一些测试用例时,一些测试会检查 NaN 的结果。
我尝试使用 std::isnan
但断言失败:
Assertion `std::isnan(x)' failed.
打印 x
的值后,结果是负 NaN ( -nan
),这在我的情况下是完全可以接受的。
在尝试使用 NaN != NaN
并使用 assert(x == x)
的事实后,编译器帮了我一个忙并优化了断言。
制作我自己的 isNaN
函数也在优化中。
如何检查 NaN 和-NaN 的相等性?
原文由 LiraNuna 发布,翻译遵循 CC BY-SA 4.0 许可协议
这很尴尬。
编译器(在本例中为 GCC)优化比较并且
isnan
返回false
的原因是因为我的团队中有人打开了-ffast-math
。从文档:
注意结尾句
-ffast-math
是不安全的。