V9/libc/math/hypot.c

Compare this file to the similar file:
Show the results in this format:

/*
 * 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;
	if(p<0) p = -p;
	if(q<0) q = -q;
	if(p<q){ r=p; p=q; q=r; }
	if(p==0) return 0;
	for(;;){
		r=q/p;
		r*=r;
		s=r+4;
		if(s==4)
			return p;
		r/=s;
		p+=2*r*p;
		q*=r;
	}
}