【问题标题】:Why float.NaN != double.NaN in C#?为什么 float.NaN != double.NaN 在 C# 中?
【发布时间】:2011-07-09 16:49:00
【问题描述】:

为什么是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?

【问题讨论】:

标签: c# .net nan


【解决方案1】:

可能是因为NaN != NaN

【讨论】:

    【解决方案2】:

    引用wikipedia

    与 NaN 的比较总是返回无序的结果,即使与它自身比较也是如此。

    【讨论】:

    • 就像事务sql一样,NULL总是不同于NULL:P
    【解决方案3】:

    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 时,浮点数实际上会在比较发生之前隐式转换为双精度数。

    【讨论】:

      猜你喜欢
      • 2013-03-30
      • 2012-02-07
      • 1970-01-01
      • 2010-12-19
      • 2010-11-11
      • 2011-07-21
      • 1970-01-01
      • 2011-08-18
      • 2014-04-14
      相关资源
      最近更新 更多