#include "libm.h"12float __cdecl coshf(float x)3{4union {float f; uint32_t i;} u = {.f = x};5uint32_t sign = u.i & 0x80000000;6uint32_t w;7float t;89/* |x| */10u.i &= 0x7fffffff;11x = u.f;12w = u.i;1314/* |x| < log(2) */15if (w < 0x3f317217) {16if (w < 0x3f800000 - (12<<23)) {17FORCE_EVAL(x + 0x1p120f);18return 1;19}20t = expm1f(x);21return 1 + t*t/(2*(1+t));22}2324/* |x| < log(FLT_MAX) */25if (w < 0x42b17217) {26t = expf(x);27return 0.5f*(t + 1/t);28}2930/* |x| > log(FLT_MAX) or nan */31if (w > 0x7f800000) {32u.i |= sign | 0x400000;33return u.f;34}35t = __expo2f(x, 1.0f);36return t;37}383940