xref: /plan9/sys/src/ape/lib/ap/math/atan2.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1 #include <math.h>
2 #include <errno.h>
3 /*
4 	atan2 discovers what quadrant the angle
5 	is in and calls atan.
6 */
7 #define pio2 1.5707963267948966192313217
8 #define pi   3.1415926535897932384626434;
9 
10 double
atan2(double arg1,double arg2)11 atan2(double arg1, double arg2)
12 {
13 
14 	if(arg1 == 0.0 && arg2 == 0.0){
15 		errno = EDOM;
16 		return 0.0;
17 	}
18 	if(arg1+arg2 == arg1) {
19 		if(arg1 >= 0)
20 			return pio2;
21 		return -pio2;
22 	}
23 	arg1 = atan(arg1/arg2);
24 	if(arg2 < 0) {
25 		if(arg1 <= 0)
26 			return arg1 + pi;
27 		return arg1 - pi;
28 	}
29 	return arg1;
30 }
31