fd_twoints u;
	double __ieee754_acos(double x)#else	double __ieee754_acos(x)	double x;#endif{#ifdef GCC_OPT_BUG        volatile double df;#else        double df;#endif	double z,p,q,r,w,s,c;	int hx,ix;	hx = __HI(x);	ix = hx&0x7fffffff;	if(ix>=0x3ff00000) {	/* |x| >= 1 */	    if(((ix-0x3ff00000)|__LO(x))==0) {	/* |x|==1 */		if(hx>0) return 0.0;		/* acos(1) = 0  */		else return pi+2.0*pio2_lo;	/* acos(-1)= pi */	    }	    return (x-x)/(x-x);		/* acos(|x|>1) is NaN */	}	if(ix<0x3fe00000) {	/* |x| < 0.5 */	    if(ix<=0x3c600000) return pio2_hi+pio2_lo;/*if|x|<2**-57*/	    z = x*x;	    p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));	    q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));	    r = p/q;	    return pio2_hi - (x - (pio2_lo-x*r));	} else  if (hx<0) {		/* x < -0.5 */	    z = (one+x)*0.5;	    p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));	    q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));	    s = fd_sqrt(z);	    r = p/q;	    w = r*s-pio2_lo;	    return pi - 2.0*(s+w);	} else {			/* x > 0.5 */	    z = (one-x)*0.5;	    s = fd_sqrt(z);	    df = s;	    __LO(df) = 0;	    c  = (z-df*df)/(s+df);	    p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));	    q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));	    r = p/q;	    w = r*s+c;	    return 2.0*(df+w);	}}