- if(ix < 0x3e800000)
- return __sindf(pi*x);
-
- y = -x; /* negative x is assumed */
-
- /*
- * argument reduction, make sure inexact flag not raised if input
- * is an integer
- */
- z = floorf(y);
- if (z != y) { /* inexact anyway */
- y *= 0.5f;
- y = 2.0f*(y - floorf(y)); /* y = |x| mod 2.0 */
- n = (int)(y*4.0f);
- } else {
- if (ix >= 0x4b800000) {
- y = 0.0f; /* y must be even */
- n = 0;
- } else {
- if (ix < 0x4b000000)
- z = y + two23; /* exact */
- GET_FLOAT_WORD(n, z);
- n &= 1;
- y = n;
- n <<= 2;
- }
- }