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