if(huge+x>one) return x;
if(really_big+x>one) return x;
	double fd_asinh(double x)#else	double fd_asinh(x)	double x;#endif{		double t,w;	int hx,ix;	hx = __HI(x);	ix = hx&0x7fffffff;	if(ix>=0x7ff00000) return x+x;	/* x is inf or NaN */	if(ix< 0x3e300000) {	/* |x|<2**-28 */	    if(huge+x>one) return x;	/* return x inexact except 0 */	} 	if(ix>0x41b00000) {	/* |x| > 2**28 */	    w = __ieee754_log(fd_fabs(x))+ln2;	} else if (ix>0x40000000) {	/* 2**28 > |x| > 2.0 */	    t = fd_fabs(x);	    w = __ieee754_log(2.0*t+one/(fd_sqrt(x*x+one)+t));	} else {		/* 2.0 > |x| > 2**-28 */	    t = x*x;	    w =fd_log1p(fd_fabs(x)+t/(one+fd_sqrt(one+t)));	}	if(hx>0) return w; else return -w;}