NaN
好吧,尽管有这样的事实,被称为“非数字”的东西被认为是数字,但仍然是数字类型,这似乎有点奇怪:-)
NaN
只是意味着特定值不能在数字类型的限制内表示(尽管可以说所有数字都必须四舍五入以适应,但这NaN
是一种特殊情况)。
一个特定NaN
的不被认为等于另一个NaN
,因为它们可能是不同的值。但是,NaN
仍然是数字类型,就像 2718 或 31415。
至于你更新的问题,用外行的话来解释:
与 NaN 的比较始终返回无序结果,即使与自身进行比较也是如此。比较谓词是信令或非信令,信令版本表示此类比较的无效异常。等式和不等式谓词是无信号的,因此返回 false 的 x = x 可用于测试 x 是否是安静的 NaN。
所有这些意味着(分解为部分):
与 NaN 的比较始终返回无序结果,即使与自身进行比较也是如此。
基本上, aNaN
不等于任何其他数字,包括 another NaN
,甚至包括自身。
比较谓词是信令或非信令,信令版本表示此类比较的无效异常。
尝试在 a 和另一个数字之间进行比较(小于、大于等)操作NaN
可能会导致抛出异常(信号)或结果为 false(非信号或安静)。
等式和不等式谓词是无信号的,因此返回 false 的 x = x 可用于测试 x 是否是安静的 NaN。
相等测试(等于,不等于)永远不会发出信号,因此使用它们不会导致异常。如果您有一个常规数字x
,那么x == x
将永远是正确的。如果x
是 a NaN
,那么x == x
永远是假的。它为您提供了一种NaN
轻松(安静地)检测的方法。