C/C++中的NaN比较规则

== 和 != 运算符似乎没有受到 IEEE 754 对于NaN的限制,@AlexD的答案中已经指出。

然而, 中的比较宏确实需要遵循等价于 IEEE 754 的 NaN 规则。以下来自草案 N1580 第 7.12.14 节的比较宏声明,说明了 中的比较宏确实需要确保,如果 x、y 中有一个或者两个是 NaN,则:

isunordered(x, y) 为 true

isgreater(x, y)、isgreaterequal(x, y)、isless(x, y)、islessequal(x, y) 都为 false

关系运算符和相等运算符支持数字值之间通常的数学关系。对于任何一对有序的数字值,只有关系之一 — 小于、大于 和 等于 — 是真的。当参数值为 NaN 时,关系运算符可能会引发"无效"的浮点异常。对于一个 NaN 和一个数字值,或者两个 NaN,只有无序关系是真的。

C++ 标准在 问题上简单地参照了 C 标准:

分类/比较函数的行为与C标准中相应名称的宏定义在7.12.3“分类宏”和7.12.14“比较宏”中表现相同。


“暗香浮动月黄昏”的意思及全诗出处和翻译赏析
温州到杭州自驾路线