代码之家  ›  专栏  ›  技术社区  ›  trinalbadger587

有多个Nans在双人间吗?

  •  0
  • trinalbadger587  · 技术社区  · 8 年前

    此代码:

        double d = BitConverter.Int64BitsToDouble(long.MaxValue);
        Console.WriteLine(d);
        Console.WriteLine(double.IsNaN(d));
        Console.WriteLine(BitConverter.DoubleToInt64Bits(d) == BitConverter.DoubleToInt64Bits(double.NaN));
    

        NaN
        True
        False
    

    这意味着NaN并不总是相同的双精度,我说得对吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Patricia Shanahan    8 年前

    根据IEEE 754标准,所有指数位为1且至少有一个有效位为1的任何位模式都是NaN。根据这个规则,有2个 53 -2个NaN用于64位浮点。

    您没有指定语言。一些使用IEEE754的语言或语言实现可能更喜欢NaN的特定位模式,并尝试强制NaN使用该模式。例如 Java Language Specification 说:

    在大多数情况下,JavaSE平台处理给定的 类型,就像折叠为一个规范值一样,因此 规范通常引用任意NaN,就像引用 规范值。

    要了解浮点运算在程序中的行为,您需要考虑适当的语言规则以及底层的浮点实现。