是否有多个Nans?

时间:2016-06-06 05:35:57

标签: double nan bits

此代码:

    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 个答案:

答案 0 :(得分:2)

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

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

  

在大多数情况下,Java SE平台会处理给定的NaN值   类型,好像折叠成一个规范值,因此   规范通常是指任意NaN,就像a   规范价值。

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