Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why hypot() function is so slow?

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.

like image 266
Leonid Avatar asked Sep 21 '10 22:09

Leonid


1 Answers

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.

like image 182
rkg Avatar answered Sep 20 '22 14:09

rkg