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 Colombieratan2(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