if(huge+x>one) return 0.5*x;
if(really_big+x>one) return 0.5*x;
	double __ieee754_j1(double x) #else	double __ieee754_j1(x) 	double x;#endif{	double z, s,c,ss,cc,r,u,v,y;	int hx,ix;	hx = __HI(x);	ix = hx&0x7fffffff;	if(ix>=0x7ff00000) return one/x;	y = fd_fabs(x);	if(ix >= 0x40000000) {	/* |x| >= 2.0 */		s = fd_sin(y);		c = fd_cos(y);		ss = -s-c;		cc = s-c;		if(ix<0x7fe00000) {  /* make sure y+y not overflow */		    z = fd_cos(y+y);		    if ((s*c)>zero) cc = z/ss;		    else 	    ss = z/cc;		}	/*	 * j1(x) = 1/sqrt(pi) * (P(1,x)*cc - Q(1,x)*ss) / sqrt(x)	 * y1(x) = 1/sqrt(pi) * (P(1,x)*ss + Q(1,x)*cc) / sqrt(x)	 */		if(ix>0x48000000) z = (invsqrtpi*cc)/fd_sqrt(y);		else {		    u = pone(y); v = qone(y);		    z = invsqrtpi*(u*cc-v*ss)/fd_sqrt(y);		}		if(hx<0) return -z;		else  	 return  z;	}	if(ix<0x3e400000) {	/* |x|<2**-27 */	    if(huge+x>one) return 0.5*x;/* inexact if x!=0 necessary */	}	z = x*x;	r =  z*(r00+z*(r01+z*(r02+z*r03)));	s =  one+z*(s01+z*(s02+z*(s03+z*(s04+z*s05))));	r *= x;	return(x*0.5+r/s);}