n   = __LO(z)&1;
u.d = z; n   = __LO(u)&1;
	static double sin_pi(double x)#else	static double sin_pi(x)	double x;#endif{	double y,z;	int n,ix;	ix = 0x7fffffff&__HI(x);	if(ix<0x3fd00000) return __kernel_sin(pi*x,zero,0);	y = -x;		/* x is assume negative */    /*     * argument reduction, make sure inexact flag not raised if input     * is an integer     */	z = fd_floor(y);	if(z!=y) {				/* inexact anyway */	    y  *= 0.5;	    y   = 2.0*(y - fd_floor(y));		/* y = |x| mod 2.0 */	    n   = (int) (y*4.0);	} else {            if(ix>=0x43400000) {                y = zero; n = 0;                 /* y must be even */            } else {                if(ix<0x43300000) z = y+two52;	/* exact */                n   = __LO(z)&1;        /* lower word of z */                y  = n;                n<<= 2;            }        }	switch (n) {	    case 0:   y =  __kernel_sin(pi*y,zero,0); break;	    case 1:   	    case 2:   y =  __kernel_cos(pi*(0.5-y),zero); break;	    case 3:  	    case 4:   y =  __kernel_sin(pi*(one-y),zero,0); break;	    case 5:	    case 6:   y = -__kernel_cos(pi*(y-1.5),zero); break;	    default:  y =  __kernel_sin(pi*(y-2.0),zero,0); break;	    }	return -y;}