#include "libm.h"float sinhf(float x){union {float f; uint32_t i;} u = {.f = x};uint32_t w;float t, h, absx;h = 0.5;if (u.i >> 31)h = -h;/* |x| */u.i &= 0x7fffffff;absx = u.f;w = u.i;/* |x| < log(FLT_MAX) */if (w < 0x42b17217) {t = expm1f(absx);if (w < 0x3f800000) {if (w < 0x3f800000 - (12<<23))return x;return h*(2*t - t*t/(t+1));}return h*(t + t/(t+1));}/* |x| > logf(FLT_MAX) or nan */t = 2*h*__expo2f(absx);return t;}