任何人都能解释为什么会这样吗? http://play.golang.org/p/QTaHpUm5P7
抱歉不要在这里粘贴代码,但我在移动ATM上。
我知道我可以使用math.IsNaN()但我正在使用比较运算符来处理所有测试用例。
答案 0 :(得分:9)
通常,NaN
不等于任何号码,包括其本身。那是因为它代表了一个超出代表范围的数字。
因此,无法保证您在表示之外没有两个不同的数字,例如0 / 0
和-1的平方根。
事实上,许多系统都依赖于这种不等式来实现isNan()
,如:
define isNaN(x):
return x != x
从NaN Wikipedia page开始,IEEE 754定义:
−∞ = −∞
,+∞ = +∞
和x ≠ NaN
适用于任何x
,包括NaN
。答案 1 :(得分:4)
这是What is the rationale for all comparisons returning false for IEEE754 NaN values?的副本 - 在IEE754中,NaN永远不会自相等,相关的答案解释了原因。