3 #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
4 long double atanhl(long double x)
8 #elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384
9 /* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */
10 long double atanhl(long double x)
14 struct{uint64_t m; uint16_t se; uint16_t pad;} i;
16 unsigned e = u.i.se & 0x7fff;
17 unsigned s = u.i.se >> 15;
24 /* |x| < 0.5, up to 1.7ulp error */
25 x = 0.5*log1pl(2*x + 2*x*x/(1-x));
27 x = 0.5*log1pl(2*x/(1-x));