gpt4 book ai didi

c++ - 不正确的浮点舍入

转载 作者:太空狗 更新时间:2023-10-29 20:04:21 24 4
gpt4 key购买 nike

在 gcc 4.7.3 上,我的 fegetround() 函数返回 FE_TONEAREST。根据c++ reference ,这意味着从零四舍五入。本质上,这意味着保存在乘法后调整尾数精度时移出的最后一位(因为它将是应有的两倍长)。之后,将保存的位添加到最终的尾数结果中。

例如,浮点乘法给出以下结果:

0x38b7aad5 * 0x38b7aad5 = 0x3203c5af

乘法后的尾数为

  1011 0111 1010 1010 1101 0101
x 1011 0111 1010 1010 1101 0101
-------------------------------
1[000 0011 1100 0101 1010 1110] [1]000 0101 1001 0101 0011 1001

[23'b] 集保存有效数字,而 [1'b] 集保存最后移出的位。注意结果的尾数是

[000 0011 1100 0101 1010 1111]

最后一位切换到1是因为[1'b1]集被添加到拼接后的尾数([23'b] 设置) 由于舍入模式。

这是一个难倒我的例子,因为在我看来硬件没有正确舍入。

0x20922800 * 0x20922800 = 0x1a6e34c (check this on your machine)

1010 0110 1110 0011 0100 1101
x 1010 0110 1110 0011 0100 1101
-------------------------------
01[01 0011 0111 0001 1010 0110 0][1]00 0000 0000 0000 0000 0000

Final Mantissas:
Their Result: 01 0011 0111 0001 1010 0110 0
Correct Result(?): 01 0011 0111 0001 1010 0110 1

我整天都在处理二进制文件,所以我可能遗漏了一些简单的东西。对于给定的舍入模式,哪个答案是正确的?

最佳答案

当四舍五入到最接近时,IEEE 指定四舍五入为偶数。 0 是偶数,1 是奇数,因此 Intel 是正确的。

关于c++ - 不正确的浮点舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435517/

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