| OLD | NEW |
| 1 #include "libm.h" | 1 #include "libm.h" |
| 2 | 2 |
| 3 #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 | 3 #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 |
| 4 long double acoshl(long double x) | 4 long double acoshl(long double x) { |
| 5 { | 5 return acosh(x); |
| 6 » return acosh(x); | |
| 7 } | 6 } |
| 8 #elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 | 7 #elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 |
| 9 /* acosh(x) = log(x + sqrt(x*x-1)) */ | 8 /* acosh(x) = log(x + sqrt(x*x-1)) */ |
| 10 long double acoshl(long double x) | 9 long double acoshl(long double x) { |
| 11 { | 10 union ldshape u = {x}; |
| 12 » union ldshape u = {x}; | 11 int e = u.i.se & 0x7fff; |
| 13 » int e = u.i.se & 0x7fff; | |
| 14 | 12 |
| 15 » if (e < 0x3fff + 1) | 13 if (e < 0x3fff + 1) |
| 16 » » /* |x| < 2, invalid if x < 1 or nan */ | 14 /* |x| < 2, invalid if x < 1 or nan */ |
| 17 » » return log1pl(x-1 + sqrtl((x-1)*(x-1)+2*(x-1))); | 15 return log1pl(x - 1 + sqrtl((x - 1) * (x - 1) + 2 * (x - 1))); |
| 18 » if (e < 0x3fff + 32) | 16 if (e < 0x3fff + 32) |
| 19 » » /* |x| < 0x1p32 */ | 17 /* |x| < 0x1p32 */ |
| 20 » » return logl(2*x - 1/(x+sqrtl(x*x-1))); | 18 return logl(2 * x - 1 / (x + sqrtl(x * x - 1))); |
| 21 » return logl(x) + 0.693147180559945309417232121458176568L; | 19 return logl(x) + 0.693147180559945309417232121458176568L; |
| 22 } | 20 } |
| 23 #elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384 | 21 #elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384 |
| 24 // TODO: broken implementation to make things compile | 22 // TODO: broken implementation to make things compile |
| 25 long double acoshl(long double x) | 23 long double acoshl(long double x) { |
| 26 { | 24 return acosh(x); |
| 27 » return acosh(x); | |
| 28 } | 25 } |
| 29 #endif | 26 #endif |
| OLD | NEW |