diff --git a/lib/libm/math.c b/lib/libm/math.c
index 984636627cdfeead24201b15076e2ae540887eba..5e00740d10500da3f313e68b89fd0187002fc079 100644
--- a/lib/libm/math.c
+++ b/lib/libm/math.c
@@ -61,7 +61,12 @@ float log2f(float x) { return logf(x) / (float)_M_LN2; }
 static const float _M_LN10 = 2.30258509299404; // 0x40135d8e
 float log10f(float x) { return logf(x) / (float)_M_LN10; }
 
-float tanhf(float x) { return sinhf(x) / coshf(x); }
+float tanhf(float x) {
+    if (isinf(x)) {
+        return copysignf(1, x);
+    }
+    return sinhf(x) / coshf(x);
+}
 
 /*****************************************************************************/
 /*****************************************************************************/