【发布时间】:2011-05-30 16:57:04
【问题描述】:
我偶然发现了 .NET 在代码中对double.NaN 的定义:
public const double NaN = (double)0.0 / (double)0.0;
PositiveInfinity 和 NegativeInfinity 的做法类似。
double.IsNaN(去掉一些#pragmas 和 cmets)定义为:
[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 如何代表“幕后”? double怎么能被0除,为什么NaN != NaN会这样?
【问题讨论】:
-
这更多是关于 NaN 而不是 .NET 的细节......请参阅 en.wikipedia.org/wiki/NaN
-
double.NaN 的可能副本
-
@Jon Skeet:我同意,感谢您指出这一点并提供链接!稍微改变了问题,减少了 .NET 的特定性。
-
它与 database-null 兼容。还有一条规则说 null != null