为什么在C#中浮动.NaN!= double.NaN?

时间:2011-03-06 05:49:13

标签: c# .net nan

为什么float.NaN != double.NaN

float.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?

3 个答案:

答案 0 :(得分: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时,浮动实际上会在比较发生之前隐式转换为双精度。

答案 1 :(得分:29)

可能是因为NaN != NaN

答案 2 :(得分:10)

引用wikipedia

  

与NaN进行比较时,即使与自身进行比较,也始终会返回无序结果。