|
|
researchv10 Norman
/*
* hypot -- sqrt(p*p+q*q), but overflows only if the result does.
* See Cleve Moler and Donald Morrison,
* ``Replacing Square Roots by Pythagorean Sums,''
* IBM Journal of Research and Development,
* Vol. 27, Number 6, pp. 577-581, Nov. 1983
*/
double hypot(p, q)
double p, q;
{
double r, s, pfac;
if(p<0) p = -p;
if(q<0) q = -q;
if(p<q){ r=p; p=q; q=r; }
if(p==0) return 0;
pfac = p;
r = q = q/p;
p = 1.0;
for(;;){
r*=r;
s=r+4;
if(s==4)
return p*pfac;
r/=s;
p+=2*r*p;
q*=r;
r=q/p;
}
}
double cabs(z)
struct{
double x, y;
}z;
{
return hypot(z.x, z.y);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.