NaN与Go中的NaN不同?

时间:2014-02-19 02:06:28

标签: go

任何人都能解释为什么会这样吗? http://play.golang.org/p/QTaHpUm5P7

抱歉不要在这里粘贴代码,但我在移动ATM上。

我知道我可以使用math.IsNaN()但我正在使用比较运算符来处理所有测试用例。

2 个答案:

答案 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永远不会自相等,相关的答案解释了原因。