File:  [Research Unix] / researchv10no / libc / math / hypot.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:35 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv10, HEAD
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);
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.