gpt4 book ai didi

java - NaN 的总和 : How is the underlying bit pattern calculated?

转载 作者:行者123 更新时间:2023-12-02 12:20:06 27 4
gpt4 key购买 nike

问题:JVM 如何计算两个 double NaN 的和?

详细信息:IEEE 754 规范为 NaN 保留了两个范围的位模式:

0x7ff0000000000001 -> 0x7ffffffffffffffff

0xfff0000000000001 -> 0xffffffffffffffff。

IEEE 754 要求两个 NaN 之和为 NaN,但据我所知,它对实现细节保持沉默。因此,为了回答我的问题:如果我们为 NaN x 的十六进制位模式编写 b(x),我想知道:JVM 如何从 b(x)b(y) 计算 b(x + y) 玩一点代码,我让人相信:

声明:令t = 0x0008000000000000。如果 b(y) + t 位于有效的 NaN 范围内,则:

b(x + y) = b(y) + t

否则,

b(x + y) = b(y).

这对我来说似乎很奇怪,我想了解更多。作为记录,我在 Intel i7 MacBook 上使用 Java 8(以防 Java 版本或物理硬件问题。)以下是两个示例:

示例 1,其中 b(x + y) = b(y):

b(x) = 0x7fffddee0f43e7d4
b(y) = 0xfffaeaba08397e4e
b(x + y) = 0xfffaeaba08397e4e

示例 2,其中 b(x + y) = b(y) + t:

b(x) = 0xffff4f0202031106
b(y) = 0xfff79342c97104ff
b(x + y) = 0xffff9342c97104ff

有人知道 JVM 是如何计算总和的吗?

谢谢!

最佳答案

对于浮点,大多数实现仅依赖于底层硬件的功能。假设您在某种 x86 架构上运行此程序,则规则如下:(您可以在 https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf 的第 4.8.3.5 节中找到此内容):

enter image description here

关于java - NaN 的总和 : How is the underlying bit pattern calculated?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60861557/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com