Single.NaN不等于自己?

Ske*_*Jon 0 c# nan

我在调试一些单元测试时发现了这一点,这些测试将返回的单个数组与预期结果进行了比较

System.Single.NaN == System.Single.Nan;
Run Code Online (Sandbox Code Playgroud)

单元测试期望是正确的,但评估结果为假.当其他单一的静态方法返回true时,为什么这会求值为false?NaN不是恒定值吗?

System.Single.MaxValue == System.Single.MaxValue;
System.Single.Epsilon == System.Single.Epsilon;
null == null;
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/system.single.nan.aspx指出:"两个NaN值被认为是彼此不相等的." 但这个问题出于好奇,为什么这比其他任何东西都重要.

xan*_*tos 5

因为IEEE 754标准(用于float和的标准double)是这样说的.

引用维基

与NaN进行比较时,即使与自身进行比较,也会返回无序结果.比较谓词是信令或非信令,信令版本表示这种比较的无效例外.等式和不等式谓词是非信令的,因此x = x返回false可用于测试x是否是安静的NaN.如果它们接收NaN操作数,则其他标准比较谓词都是信令,该标准还提供这些其他谓词的非信令版本.谓词isNaN(x)确定值是否为NaN并且从不发出异常信号,即使x是信令NaN.

(请注意,.NET不支持信令NaN,并且可能将其视为非信令)