xref: /plan9/sys/src/ape/lib/ap/math/hypot.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1*3e12c5d1SDavid du Colombier #include <math.h>
2*3e12c5d1SDavid du Colombier /*
3*3e12c5d1SDavid du Colombier  * sqrt(a^2 + b^2)
4*3e12c5d1SDavid du Colombier  *	(but carefully)
5*3e12c5d1SDavid du Colombier  */
6*3e12c5d1SDavid du Colombier 
7*3e12c5d1SDavid du Colombier double
hypot(double a,double b)8*3e12c5d1SDavid du Colombier hypot(double a, double b)
9*3e12c5d1SDavid du Colombier {
10*3e12c5d1SDavid du Colombier 	double t;
11*3e12c5d1SDavid du Colombier 
12*3e12c5d1SDavid du Colombier 	if(a < 0)
13*3e12c5d1SDavid du Colombier 		a = -a;
14*3e12c5d1SDavid du Colombier 	if(b < 0)
15*3e12c5d1SDavid du Colombier 		b = -b;
16*3e12c5d1SDavid du Colombier 	if(a > b) {
17*3e12c5d1SDavid du Colombier 		t = a;
18*3e12c5d1SDavid du Colombier 		a = b;
19*3e12c5d1SDavid du Colombier 		b = t;
20*3e12c5d1SDavid du Colombier 	}
21*3e12c5d1SDavid du Colombier 	if(b == 0)
22*3e12c5d1SDavid du Colombier 		return 0;
23*3e12c5d1SDavid du Colombier 	a /= b;
24*3e12c5d1SDavid du Colombier 	/*
25*3e12c5d1SDavid du Colombier 	 * pathological overflow possible
26*3e12c5d1SDavid du Colombier 	 * in the next line.
27*3e12c5d1SDavid du Colombier 	 */
28*3e12c5d1SDavid du Colombier 	return b * sqrt(1 + a*a);
29*3e12c5d1SDavid du Colombier }
30