int k,xsb;
int k;
	double __ieee754_exp(double x)	/* default IEEE double exp */#else	double __ieee754_exp(x)	/* default IEEE double exp */	double x;#endif{	double y,hi,lo,c,t;	int k,xsb;	unsigned hx;	hx  = __HI(x);	/* high word of x */	xsb = (hx>>31)&1;		/* sign bit of x */	hx &= 0x7fffffff;		/* high word of |x| */    /* filter out non-finite argument */	if(hx >= 0x40862E42) {			/* if |x|>=709.78... */            if(hx>=0x7ff00000) {		if(((hx&0xfffff)|__LO(x))!=0) 		     return x+x; 		/* NaN */		else return (xsb==0)? x:0.0;	/* exp(+-inf)={inf,0} */	    }	    if(x > o_threshold) return really_big*really_big; /* overflow */	    if(x < u_threshold) return twom1000*twom1000; /* underflow */	}    /* argument reduction */	if(hx > 0x3fd62e42) {		/* if  |x| > 0.5 ln2 */ 	    if(hx < 0x3FF0A2B2) {	/* and |x| < 1.5 ln2 */		hi = x-ln2HI[xsb]; lo=ln2LO[xsb]; k = 1-xsb-xsb;	    } else {		k  = (int)(invln2*x+halF[xsb]);		t  = k;		hi = x - t*ln2HI[0];	/* t*ln2HI is exact here */		lo = t*ln2LO[0];	    }	    x  = hi - lo;	} 	else if(hx < 0x3e300000)  {	/* when |x|<2**-28 */	    if(really_big+x>one) return one+x;/* trigger inexact */	}	else k = 0;    /* x is now in primary range */	t  = x*x;	c  = x - t*(P1+t*(P2+t*(P3+t*(P4+t*P5))));	if(k==0) 	return one-((x*c)/(c-2.0)-x); 	else 		y = one-((lo-(x*c)/(2.0-c))-hi);	if(k >= -1021) {	    __HI(y) += (k<<20);	/* add k to y's exponent */	    return y;	} else {	    __HI(y) += ((k+1000)<<20);/* add k to y's exponent */	    return y*twom1000;	}}