I did some testing with C++
hypot()
and Java
Math.hypot
. They both seem to be significantly slower than sqrt(a*a + b*b)
. Is that because of a better precision? What method to calculate a hypotenuse hypot
function uses? Surprisingly I couldn't find any indication of poor performance in the documentation.
It's not a simple sqrt function. You should check this link for the implementation of the algorithm: http://www.koders.com/c/fid7D3C8841ADC384A5F8DE0D081C88331E3909BF3A.aspx
It has while loop to check for convergence
/* Slower but safer algorithm due to Moler and Morrison. Never produces any intermediate result greater than roughly the larger of X and Y. Should converge to machine-precision accuracy in 3 iterations. */ double r = ratio*ratio, t, s, p = abig, q = asmall; do { t = 4. + r; if (t == 4.) break; s = r / t; p += 2. * s * p; q *= s; r = (q / p) * (q / p); } while (1);
EDIT (Update from J.M):
Here is the original Moler-Morrison paper, and here is a nice follow-up due to Dubrulle.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With