| #include "libm.h" | 
 |  | 
 | #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 | 
 | long double sinhl(long double x) | 
 | { | 
 | 	return sinh(x); | 
 | } | 
 | #elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 | 
 | long double sinhl(long double x) | 
 | { | 
 | 	union ldshape u = {x}; | 
 | 	unsigned ex = u.i.se & 0x7fff; | 
 | 	long double h, t, absx; | 
 |  | 
 | 	h = 0.5; | 
 | 	if (u.i.se & 0x8000) | 
 | 		h = -h; | 
 | 	/* |x| */ | 
 | 	u.i.se = ex; | 
 | 	absx = u.f; | 
 |  | 
 | 	/* |x| < log(LDBL_MAX) */ | 
 | 	if (ex < 0x3fff+13 || (ex == 0x3fff+13 && u.i.m>>32 < 0xb17217f7)) { | 
 | 		t = expm1l(absx); | 
 | 		if (ex < 0x3fff) { | 
 | 			if (ex < 0x3fff-32) | 
 | 				return x; | 
 | 			return h*(2*t - t*t/(1+t)); | 
 | 		} | 
 | 		return h*(t + t/(t+1)); | 
 | 	} | 
 |  | 
 | 	/* |x| > log(LDBL_MAX) or nan */ | 
 | 	t = expl(0.5*absx); | 
 | 	return h*t*t; | 
 | } | 
 | #elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384 | 
 | // TODO: broken implementation to make things compile | 
 | long double sinhl(long double x) | 
 | { | 
 | 	return sinh(x); | 
 | } | 
 | #endif |