#include "libm.h"
-static volatile float
+static const volatile float
tiny = 1.0e-30;
static const float
-zero = 0.0,
pi_o_4 = 7.8539818525e-01, /* 0x3f490fdb */
pi_o_2 = 1.5707963705e+00, /* 0x3fc90fdb */
pi = 3.1415927410e+00; /* 0x40490fdb */
-static volatile float
+static const volatile float
pi_lo = -8.7422776573e-08; /* 0xb3bbbd2e */
float atan2f(float y, float x)
switch (m) {
case 0: return pi_o_4+tiny; /* atan(+INF,+INF) */
case 1: return -pi_o_4-tiny; /* atan(-INF,+INF) */
- case 2: return (float)3.0*pi_o_4+tiny; /*atan(+INF,-INF)*/
- case 3: return (float)-3.0*pi_o_4-tiny; /*atan(-INF,-INF)*/
+ case 2: return 3.0f*pi_o_4+tiny; /*atan(+INF,-INF)*/
+ case 3: return -3.0f*pi_o_4-tiny; /*atan(-INF,-INF)*/
}
} else {
switch (m) {
- case 0: return zero; /* atan(+...,+INF) */
- case 1: return -zero; /* atan(-...,+INF) */
+ case 0: return 0.0f; /* atan(+...,+INF) */
+ case 1: return -0.0f; /* atan(-...,+INF) */
case 2: return pi+tiny; /* atan(+...,-INF) */
case 3: return -pi-tiny; /* atan(-...,-INF) */
}
/* compute y/x */
k = (iy-ix)>>23;
if (k > 26) { /* |y/x| > 2**26 */
- z = pi_o_2+(float)0.5*pi_lo;
+ z = pi_o_2 + 0.5f*pi_lo;
m &= 1;
} else if (k < -26 && hx < 0) /* 0 > |y|/x > -2**-26 */
z = 0.0;