xref: /plan9/sys/src/libc/port/atan2.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1*3e12c5d1SDavid du Colombier #include <u.h>
2*3e12c5d1SDavid du Colombier #include <libc.h>
3*3e12c5d1SDavid du Colombier /*
4*3e12c5d1SDavid du Colombier 	atan2 discovers what quadrant the angle
5*3e12c5d1SDavid du Colombier 	is in and calls atan.
6*3e12c5d1SDavid du Colombier */
7*3e12c5d1SDavid du Colombier 
8*3e12c5d1SDavid du Colombier double
atan2(double arg1,double arg2)9*3e12c5d1SDavid du Colombier atan2(double arg1, double arg2)
10*3e12c5d1SDavid du Colombier {
11*3e12c5d1SDavid du Colombier 
12*3e12c5d1SDavid du Colombier 	if(arg1+arg2 == arg1) {
13*3e12c5d1SDavid du Colombier 		if(arg1 >= 0)
14*3e12c5d1SDavid du Colombier 			return PIO2;
15*3e12c5d1SDavid du Colombier 		return -PIO2;
16*3e12c5d1SDavid du Colombier 	}
17*3e12c5d1SDavid du Colombier 	arg1 = atan(arg1/arg2);
18*3e12c5d1SDavid du Colombier 	if(arg2 < 0) {
19*3e12c5d1SDavid du Colombier 		if(arg1 <= 0)
20*3e12c5d1SDavid du Colombier 			return arg1 + PI;
21*3e12c5d1SDavid du Colombier 		return arg1 - PI;
22*3e12c5d1SDavid du Colombier 	}
23*3e12c5d1SDavid du Colombier 	return arg1;
24*3e12c5d1SDavid du Colombier }
25