176 const float a1 = +0x1.ffffeap-1f;
177 const float a3 = -0x1.55437p-2f;
178 const float a5 = +0x1.972be6p-3f;
179 const float a7 = -0x1.1436ap-3f;
180 const float a9 = +0x1.5785aap-4f;
181 const float a11 = -0x1.2f3004p-5f;
182 const float a13 = +0x1.01a37cp-7f;
184 const float x_times_x = x * x;
186 arctan = fmaf(x_times_x, arctan, a11);
187 arctan = fmaf(x_times_x, arctan, a9);
188 arctan = fmaf(x_times_x, arctan, a7);
189 arctan = fmaf(x_times_x, arctan, a5);
190 arctan = fmaf(x_times_x, arctan, a3);
191 arctan = fmaf(x_times_x, arctan, a1);
226 const float pi = 0x1.921fb6p1f;
227 const float pi_2 = 0x1.921fb6p0f;
229 if (fabs(x) == 0.f) {
230 return (fabs(y) == 0.f) ? copysignf(0.f, y) : copysignf(pi_2, y);
232 const int swap = fabs(x) < fabs(y);
233 const float input = swap ? (x / y) : (y / x);
235 result = swap ? (input >= 0.f ? pi_2 : -pi_2) - result : result;
237 result += copysignf(pi, y);