github.com/afumu/libc@v0.0.6/musl/src/math/acoshl.c (about)

     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