gpt4 book ai didi

c++ - 计算这个平方根时,什么被认为是 IEEE-754 正确的结果?

转载 作者:行者123 更新时间:2023-12-03 06:15:34 24 4
gpt4 key购买 nike

我正在使用牛顿拉夫森平方根算法来计算输入值的单精度平方根。然而,使用我输入的测试平台,我发现某些输入值不会收敛到最接近实际平方根的答案。当我说实际平方根时,我的意思是您将获得比 32 位 IEEE-754 更精确的结果。因此,我想知道在 IEEE-754 中执行平方根时获得的正确值是什么。这个论坛上的一些人告诉我,最接近的值不一定是最正确的,这就是我问的原因。

计算单精度 IEEE-754 32 位值 0x3f7fffff 的平方根时,什么被认为是正确的结果?为什么?

此外,计算0x7F7FFFFF的平方根时,什么才是正确的结果?

最佳答案

0x3f7fffff1.0 - u,其中 u = 2**-24sqrt(1 + x) 的泰勒级数为:

sqrt(1 + x) = 1 + x/2 - x^2/8 + O(x^3)

如果我们将 -u 代入 x,我们会得到:

sqrt(1 - u) = 1 - u/2 - u^2/8 - O(u^3)

1 - u/2 是两个最接近的可表示 float 1-u1 之间的精确中间点>;由于泰勒级数中的下一项为负,因此 sqrt(1 - u) 的值稍微小一点,因此结果向下舍入为 1 - u >.

0x7f7fffff 只是 2**128*(1-u),因此数学上精确的平方根是 2**64*(1 - u)/2 - u^2/8 - ...),向下舍入为 2**64 * (1-u),如上所述。

关于c++ - 计算这个平方根时,什么被认为是 IEEE-754 正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17599955/

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