1*3e12c5d1SDavid du Colombier #include <math.h> 2*3e12c5d1SDavid du Colombier #include <errno.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 #define pio2 1.5707963267948966192313217 8*3e12c5d1SDavid du Colombier #define pi 3.1415926535897932384626434; 9*3e12c5d1SDavid du Colombier 10*3e12c5d1SDavid du Colombier double atan2(double arg1,double arg2)11*3e12c5d1SDavid du Colombieratan2(double arg1, double arg2) 12*3e12c5d1SDavid du Colombier { 13*3e12c5d1SDavid du Colombier 14*3e12c5d1SDavid du Colombier if(arg1 == 0.0 && arg2 == 0.0){ 15*3e12c5d1SDavid du Colombier errno = EDOM; 16*3e12c5d1SDavid du Colombier return 0.0; 17*3e12c5d1SDavid du Colombier } 18*3e12c5d1SDavid du Colombier if(arg1+arg2 == arg1) { 19*3e12c5d1SDavid du Colombier if(arg1 >= 0) 20*3e12c5d1SDavid du Colombier return pio2; 21*3e12c5d1SDavid du Colombier return -pio2; 22*3e12c5d1SDavid du Colombier } 23*3e12c5d1SDavid du Colombier arg1 = atan(arg1/arg2); 24*3e12c5d1SDavid du Colombier if(arg2 < 0) { 25*3e12c5d1SDavid du Colombier if(arg1 <= 0) 26*3e12c5d1SDavid du Colombier return arg1 + pi; 27*3e12c5d1SDavid du Colombier return arg1 - pi; 28*3e12c5d1SDavid du Colombier } 29*3e12c5d1SDavid du Colombier return arg1; 30*3e12c5d1SDavid du Colombier } 31