29

为什么float.NaN != double.NaN

whilefloat.PositiveInfinity == double.PositiveInfinityfloat.NegativeInfinity == double.NegativeInfinity相等。_

例子:

bool PosInfinity = (float.PositiveInfinity == double.PositiveInfinity); //true
bool NegInfinity = (float.NegativeInfinity == double.NegativeInfinity); //true

bool isNanEqual = (float.NaN == double.NaN);  //false, WHY?
4

3 回答 3

44

NaN永远不等于NaN(即使在同一类型中)。因此存在IsNaN函数的原因:

Double zero = 0;
// This will return true.
if (Double.IsNaN(0 / zero)) 
{
    Console.WriteLine("Double.IsNan() can determine whether a value is not-a-number.");
}

您还应该知道,您所展示的所有比较实际上都不是“按原样”发生的。当您编写floatValue == doubleValue时,浮点数实际上会在比较发生之前隐式转换为双精度数。

于 2011-03-06T05:56:14.423 回答
29

大概是因为NaN != NaN

于 2011-03-06T05:53:13.447 回答
10

引用维基百科

与 NaN 的比较始终返回无序结果,即使与自身进行比较也是如此。

于 2011-03-06T05:53:31.187 回答