50 |
|
} |
51 |
|
return(0.); /* should never be reached */ |
52 |
|
} |
53 |
+ |
|
54 |
+ |
|
55 |
+ |
/* Fast arctangent approximation due to Rajan et al. 2006 */ |
56 |
+ |
double |
57 |
+ |
atan2a(double y, double x) |
58 |
+ |
{ |
59 |
+ |
double ratio, aratio, val; |
60 |
+ |
|
61 |
+ |
if (x == 0) |
62 |
+ |
return (y > 0) ? PI/2. : 3./2.*PI; |
63 |
+ |
|
64 |
+ |
aratio = (ratio = y/x) >= 0 ? ratio : -ratio; |
65 |
+ |
|
66 |
+ |
if (aratio > 1.01) |
67 |
+ |
return PI/2. - atan2a(x, y); |
68 |
+ |
|
69 |
+ |
val = PI/4.*ratio - ratio*(aratio - 1.)*(0.2447 + 0.0663*aratio); |
70 |
+ |
|
71 |
+ |
return val + PI*(x < 0); |
72 |
+ |
} |