X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fmath%2Ftanhf.c;h=10636fbd7be6c21d1c58326eba2bf7179b0dea8f;hb=062bb737de06c3906b4b4a07c7fc0fb286287efe;hp=8099ec3019a9ea3de0f88bfa98be977ac55d2e23;hpb=5d5ab51862cbd010bdf52dc3b04b0967450bcd1a;p=musl diff --git a/src/math/tanhf.c b/src/math/tanhf.c index 8099ec30..10636fbd 100644 --- a/src/math/tanhf.c +++ b/src/math/tanhf.c @@ -17,7 +17,7 @@ float tanhf(float x) /* |x| > log(3)/2 ~= 0.5493 or nan */ if (w > 0x41200000) { /* |x| > 10 */ - t = 1 + 0/(x + 0x1p-120f); + t = 1 + 0/x; } else { t = expm1f(2*x); t = 1 - 2/(t+2); @@ -26,10 +26,14 @@ float tanhf(float x) /* |x| > log(5/3)/2 ~= 0.2554 */ t = expm1f(2*x); t = t/(t+2); - } else { - /* |x| is small */ + } 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; }