【发布时间】:2014-02-16 11:03:48
【问题描述】:
我有一些在 AMD64 Linux 上开发的数字代码(使用 LLVM 3.2)。
我最近用 XCode 将它移植到了 OSX 10.9。它运行良好,但很多单元测试都失败了:似乎在 Linux 上返回 NaN(或 -NaN)的一些计算现在在 OSX 上返回 -NaN(或 NaN)。
我是否可以安全地假设正和负 NaN 是等效的,并调整我的单元测试以接受成功,或者这是出现更严重问题的迹象?
【问题讨论】:
-
如果您的 NaN 有迹象,则可能已经出现严重问题。这不正常。
-
嗯。我认为符号位总是被忽略;看起来有显示它的系统。那应该没问题。
-
您的测试首先区分不同的 NaN 有点奇怪。如果
x和/或y是NaN,则x == y、x < y和x > y都返回false;没有办法通过数值比较来区分 NaN。这表明您的测试要么正在检查代表 NaN 的位,要么正在检查 NaN 的某些转换,例如在 NaN 上使用printf生成的字符。在前一种情况下,有人已经决定了哪些位是重要的,你应该明白为什么。在后一种情况下,您依赖于printf的实现相关属性。 -
是的,测试只是区分 printf 的输出。当然我知道我需要了解哪些位是重要的——这就是我问这个问题的原因!
标签: math floating-point nan