|
|
1.1 ! root 1: /* ! 2: * hypot -- sqrt(p*p+q*q), but overflows only if the result does. ! 3: * See Cleve Moler and Donald Morrison, ! 4: * ``Replacing Square Roots by Pythagorean Sums,'' ! 5: * IBM Journal of Research and Development, ! 6: * Vol. 27, Number 6, pp. 577-581, Nov. 1983 ! 7: */ ! 8: double hypot(p, q) ! 9: double p, q; ! 10: { ! 11: double r, s; ! 12: if(p<0) p = -p; ! 13: if(q<0) q = -q; ! 14: if(p<q){ r=p; p=q; q=r; } ! 15: if(p==0) return 0; ! 16: for(;;){ ! 17: r=q/p; ! 18: r*=r; ! 19: s=r+4; ! 20: if(s==4) ! 21: return p; ! 22: r/=s; ! 23: p+=2*r*p; ! 24: q*=r; ! 25: } ! 26: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.