181 const float a1 = +0x1.ffffeap-1f;
182 const float a3 = -0x1.55437p-2f;
183 const float a5 = +0x1.972be6p-3f;
184 const float a7 = -0x1.1436ap-3f;
185 const float a9 = +0x1.5785aap-4f;
186 const float a11 = -0x1.2f3004p-5f;
187 const float a13 = +0x1.01a37cp-7f;
189 const float x_times_x = x * x;
191 arctan = fmaf(x_times_x, arctan, a11);
192 arctan = fmaf(x_times_x, arctan, a9);
193 arctan = fmaf(x_times_x, arctan, a7);
194 arctan = fmaf(x_times_x, arctan, a5);
195 arctan = fmaf(x_times_x, arctan, a3);
196 arctan = fmaf(x_times_x, arctan, a1);
231 const float pi = 0x1.921fb6p1f;
232 const float pi_2 = 0x1.921fb6p0f;
234 if (fabs(x) == 0.f) {
235 return (fabs(y) == 0.f) ? copysignf(0.f, y) : copysignf(pi_2, y);
237 const int swap = fabs(x) < fabs(y);
238 const float input = swap ? (x / y) : (y / x);
240 result = swap ? (input >= 0.f ? pi_2 : -pi_2) - result : result;
242 result += copysignf(pi, y);