if(huge+x>one) return x;
if(really_big+x>one) return x;
	double __ieee754_asin(double x)#else	double __ieee754_asin(x)	double x;#endif{	double t,w,p,q,c,r,s;	int hx,ix;	hx = __HI(x);	ix = hx&0x7fffffff;	if(ix>= 0x3ff00000) {		/* |x|>= 1 */	    if(((ix-0x3ff00000)|__LO(x))==0)		    /* asin(1)=+-pi/2 with inexact */		return x*pio2_hi+x*pio2_lo;		    return (x-x)/(x-x);		/* asin(|x|>1) is NaN */   	} else if (ix<0x3fe00000) {	/* |x|<0.5 */	    if(ix<0x3e400000) {		/* if |x| < 2**-27 */		if(huge+x>one) return x;/* return x with inexact if x!=0*/	    } else 		t = x*x;		p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5)))));		q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4)));		w = p/q;		return x+x*w;	}	/* 1> |x|>= 0.5 */	w = one-fd_fabs(x);	t = w*0.5;	p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5)))));	q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4)));	s = fd_sqrt(t);	if(ix>=0x3FEF3333) { 	/* if |x| > 0.975 */	    w = p/q;	    t = pio2_hi-(2.0*(s+s*w)-pio2_lo);	} else {	    w  = s;	    __LO(w) = 0;	    c  = (t-w*w)/(s+w);	    r  = p/q;	    p  = 2.0*s*r-(pio2_lo-2.0*c);	    q  = pio4_hi-2.0*w;	    t  = pio4_hi-(p-q);	}    	if(hx>0) return t; else return -t;    }