2

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

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

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

4

1 回答 1

6

0x3f7fffff1.0 - u,在哪里u = 2**-24。泰勒级数为sqrt(1 + x)

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

如果我们插入-ux我们得到:

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

该值1 - u/2是两个最接近的可表示浮点数之间的精确中间点,1-u并且1; 因为泰勒级数的下一项是负数,所以 的值sqrt(1 - u)稍微小一点,因此结果向下舍入为1 - u

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

于 2013-07-11T18:03:08.073 回答