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 |