55 static const uint32_t sign_mask = 0x80000000;
56 static const float b = 0.596227f;
60 memcpy(&ux, &x,
sizeof(x));
61 memcpy(&uy, &y,
sizeof(x));
65 uint32_t ux_s = sign_mask & ux;
66 uint32_t uy_s = sign_mask & uy;
69 float q = (float)( ( ~ux_s & uy_s ) >> 29 | ux_s >> 30 );
72 float bxy_a = ::fabs( b * x * y );
73 float num = bxy_a + y * y;
74 float atan_1q = num / ( x * x + bxy_a + num );
77 memcpy(&uatan, &atan_1q,
sizeof(atan_1q));
79 uint32_t uatan_2q = (ux_s ^ uy_s) | uatan;
80 memcpy(&atan_1q, &uatan_2q,
sizeof(uatan_2q));