【问题标题】:Are there multiple Nans in double?双打有多个Nans吗?
【发布时间】:2016-10-05 15:11:25
【问题描述】:

这段代码:

    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 并不总是相同的双精度数,对吗?

【问题讨论】:

标签: double nan bits


【解决方案1】:

根据 IEEE 754 标准,所有指数位为 1 且有效位为 1 的任何位模式都是 NaN。根据该规则,64 位浮点数有 253-2 个 NaN。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2023-03-10
    • 2011-03-15
    • 2021-09-29
    • 1970-01-01
    相关资源
    最近更新 更多