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

     1  #include "libm.h"
     2  
     3  float coshf(float x)
     4  {
     5  	union {float f; uint32_t i;} u = {.f = x};
     6  	uint32_t w;
     7  	float t;
     8  
     9  	/* |x| */
    10  	u.i &= 0x7fffffff;
    11  	x = u.f;
    12  	w = u.i;
    13  
    14  	/* |x| < log(2) */
    15  	if (w < 0x3f317217) {
    16  		if (w < 0x3f800000 - (12<<23)) {
    17  			FORCE_EVAL(x + 0x1p120f);
    18  			return 1;
    19  		}
    20  		t = expm1f(x);
    21  		return 1 + t*t/(2*(1+t));
    22  	}
    23  
    24  	/* |x| < log(FLT_MAX) */
    25  	if (w < 0x42b17217) {
    26  		t = expf(x);
    27  		return 0.5f*(t + 1/t);
    28  	}
    29  
    30  	/* |x| > log(FLT_MAX) or nan */
    31  	t = __expo2f(x, 1.0f);
    32  	return t;
    33  }