hx = __HI(x);
un.d = x; hx = __HI(un);
	double __ieee754_j0(double x) #else	double __ieee754_j0(x) 	double x;#endif{	double z, s,c,ss,cc,r,u,v;	int hx,ix;	hx = __HI(x);	ix = hx&0x7fffffff;	if(ix>=0x7ff00000) return one/(x*x);	x = fd_fabs(x);	if(ix >= 0x40000000) {	/* |x| >= 2.0 */		s = fd_sin(x);		c = fd_cos(x);		ss = s-c;		cc = s+c;		if(ix<0x7fe00000) {  /* make sure x+x not overflow */		    z = -fd_cos(x+x);		    if ((s*c)<zero) cc = z/ss;		    else 	    ss = z/cc;		}	/*	 * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x)	 * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x)	 */		if(ix>0x48000000) z = (invsqrtpi*cc)/fd_sqrt(x);		else {		    u = pzero(x); v = qzero(x);		    z = invsqrtpi*(u*cc-v*ss)/fd_sqrt(x);		}		return z;	}	if(ix<0x3f200000) {	/* |x| < 2**-13 */	    if(really_big+x>one) {	/* raise inexact if x != 0 */	        if(ix<0x3e400000) return one;	/* |x|<2**-27 */	        else 	      return one - 0.25*x*x;	    }	}	z = x*x;	r =  z*(R02+z*(R03+z*(R04+z*R05)));	s =  one+z*(S01+z*(S02+z*(S03+z*S04)));	if(ix < 0x3FF00000) {	/* |x| < 1.00 */	    return one + z*(-0.25+(r/s));	} else {	    u = 0.5*x;	    return((one+u)*(one-u)+z*(r/s));	}}