科学代码使用比较 NaN == NaN 的频率如何?

计算科学 浮点
2021-11-27 02:38:36

科学代码使用比较的频率如何NaN == NaN

问的原因:编译器/软件浮点库实现有时会与NaN. 例如,NaN == NaN错误地返回 true,这是一个错误。

如果最终用户依赖以下逻辑,则最终用户可能会遇到此错误:a != aiff (当且仅当) ais NaN. 或逆版本:a == aiff ais not NaN.

但是,人们真的在实际代码中使用这种逻辑( a != aiff ais )吗?人们会在真实代码中NaN使用比较吗?NaN == NaN

欢迎任何经验/例子!

PS 问这个问题最好的 stackexchange 网站是什么?

1个回答

根据许多评论,我还建议尽可能使用 isnan() 函数

话虽如此,可能存在性能差异。如果您绝对必须在软件的热循环中进行 NaN 检查并且不能将它们移动到不太关键的位置,那么考虑这些才是合理的。此外,它应该经过适当的测试和记录。

另请参阅:

is-isnan-as-fast-as-testing-equality

他们在哪里发布了一个godbolt(编译器-浏览器)链接来检查汇编代码:

神螺栓