about summary refs log tree commit diff
path: root/sysdeps/ieee754/ldbl-128/s_tanhl.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/ieee754/ldbl-128/s_tanhl.c')
-rw-r--r--sysdeps/ieee754/ldbl-128/s_tanhl.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sysdeps/ieee754/ldbl-128/s_tanhl.c b/sysdeps/ieee754/ldbl-128/s_tanhl.c
index 129735b1b5..8b1706fcdc 100644
--- a/sysdeps/ieee754/ldbl-128/s_tanhl.c
+++ b/sysdeps/ieee754/ldbl-128/s_tanhl.c
@@ -41,6 +41,7 @@
  *      only tanhl(0)=0 is exact for finite argument.
  */
 
+#include <float.h>
 #include <math.h>
 #include <math_private.h>
 
@@ -73,7 +74,14 @@ __tanhl (long double x)
       if (u.value == 0)
 	return x;		/* x == +- 0 */
       if (ix < 0x3fc60000)	/* |x| < 2^-57 */
-	return x * (one + tiny); /* tanh(small) = small */
+	{
+	  if (fabsl (x) < LDBL_MIN)
+	    {
+	      long double force_underflow = x * x;
+	      math_force_eval (force_underflow);
+	    }
+	  return x * (one + tiny); /* tanh(small) = small */
+	}
       u.parts32.w0 = ix;	/* Absolute value of x.  */
       if (ix >= 0x3fff0000)
 	{			/* |x| >= 1  */