Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/waterbox/libc/functions/math/acoshl.c
2 views
1
#include "libm.h"
2
3
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
4
long double acoshl(long double x)
5
{
6
return acosh(x);
7
}
8
#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384
9
/* acosh(x) = log(x + sqrt(x*x-1)) */
10
long double acoshl(long double x)
11
{
12
union ldshape u = {x};
13
int e = u.i.se & 0x7fff;
14
15
if (e < 0x3fff + 1)
16
/* |x| < 2, invalid if x < 1 or nan */
17
return log1pl(x-1 + sqrtl((x-1)*(x-1)+2*(x-1)));
18
if (e < 0x3fff + 32)
19
/* |x| < 0x1p32 */
20
return logl(2*x - 1/(x+sqrtl(x*x-1)));
21
return logl(x) + 0.693147180559945309417232121458176568L;
22
}
23
#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
24
// TODO: broken implementation to make things compile
25
long double acoshl(long double x)
26
{
27
return acosh(x);
28
}
29
#endif
30
31