#include "libm.h"float tanhf(float x){union {float f; uint32_t i;} u = {.f = x};uint32_t w;int sign;float t;/* x = |x| */sign = u.i >> 31;u.i &= 0x7fffffff;x = u.f;w = u.i;if (w > 0x3f0c9f54) {/* |x| > log(3)/2 ~= 0.5493 or nan */if (w > 0x41200000) {/* |x| > 10 */t = 1 + 0/x;} else {t = expm1f(2*x);t = 1 - 2/(t+2);}} else if (w > 0x3e82c578) {/* |x| > log(5/3)/2 ~= 0.2554 */t = expm1f(2*x);t = t/(t+2);} else if (w >= 0x00800000) {/* |x| >= 0x1p-126 */t = expm1f(-2*x);t = -t/(t+2);} else {/* |x| is subnormal */FORCE_EVAL(x*x);t = x;}return sign ? -t : t;}