【问题标题】:Java double value matching NaNJava双值匹配NaN
【发布时间】:2020-03-01 03:40:20
【问题描述】:

我有一个问题,Java 中是否有一个等于Double.NaN 的值。 众所周知,Double.NaN 等价于Double.longBitsToDouble(0x7ff8000000000000L)。 我在 C++ 中试过这个:

long d = (long)0x7ff8000000000000L;
cout << setprecision(308) << *((double*)&d) << endl;

并收到此号码:1.7913854515396173439813246875759771148370355414969747463437939834712133067539348971091007957318376384187247712070435161526222960236442304023361887799416099781498803833913104211684781256626064276104912473088500848240020138295465213393610297503047186864315005421110542290050185011298999959710557864144337912608e-307。但我在 Java 中尝试过,但没有成功。在 Java 中是否有与 Double.NaN 等效的双重等效项?

【问题讨论】:

    标签: java nan


    【解决方案1】:

    在 Java 中,我们有常量 Double.NaN,根据文档,它与 Double.longBitsToDouble(0x7ff8000000000000L) 相同。为什么你期望它等于 C++ 对NaN 的表示?

    您的 C++ 转换似乎有问题,而且根据 Double.longBitsToDouble 的文档,即使它符合 IEEE 754 标准,返回的位模式也可能存在差异。不要依赖于您的代码的此类低级实现细节。

    【讨论】:

      【解决方案2】:

      NaN 不是数字,因此您不得尝试对其进行算术运算,例如将其与另一个数字进行比较。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-18
        • 2012-11-07
        • 1970-01-01
        • 2022-11-27
        • 2020-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多