![](/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.