我偶然发现了 .NETdouble.NaN
在代码中的定义:
public const double NaN = (double)0.0 / (double)0.0;
这在PositiveInfinity
和中类似地完成NegativeInfinity
。
double.IsNaN
(删除一些#pragmas 和注释)定义为:
[Pure]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static bool IsNaN(double d)
{
if (d != d)
{
return true;
}
else
{
return false;
}
}
这对我来说非常违反直觉。
为什么将 NaN 定义为除以零?0.0 / 0.0
“幕后”如何表现?怎么可能除以0 double
,为什么NaN != NaN
?