![](/img/trans.png)
[英]What is the fastest way to write a IEEE-754 compliant double/float division in C++?
[英]What is accepted as the IEEE-754 correct result when computing this square root?
我有一个Newton-Raphson平方根算法,用于计算输入值的单精度平方根。 但是,使用我输入的测试平台,我发现某些输入值未收敛到最接近实际平方根的答案。 当我说实际的平方根时,我的意思是您得到的结果将比32位IEEE-754更精确。 结果,我想知道在IEEE-754中执行平方根时,应该获得什么正确的值。 这个论坛上的一些人告诉我,最接近的值不一定是最正确的,这就是我要问的原因。
计算单精度IEEE-754 32位值0x3f7fffff的平方根时,什么被认为是正确的结果,为什么?
此外,计算0x7F7FFFFF的平方根时,什么是正确的结果?
0x3f7fffff
是1.0 - u
,其中u = 2**-24
。 sqrt(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
是两个最接近的可表示浮点数1-u
和1
之间的精确中间点; 由于泰勒级数的下一项为负,因此sqrt(1 - u)
值仅小一点,因此结果四舍五入为1 - u
。
0x7f7fffff
仅为2**128*(1-u)
,因此数学上精确的平方根为2**64*(1 - u/2 - u^2/8 - ...)
0x7f7fffff
2**64*(1 - u/2 - u^2/8 - ...)
,四舍五入为2**64 * (1-u)
,如上所述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.