aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/ieee754/ldbl-128/s_expm1l.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sysdeps/ieee754/ldbl-128/s_expm1l.c b/sysdeps/ieee754/ldbl-128/s_expm1l.c
index 1c12109511..f708af504c 100644
--- a/sysdeps/ieee754/ldbl-128/s_expm1l.c
+++ b/sysdeps/ieee754/ldbl-128/s_expm1l.c
@@ -54,6 +54,7 @@
#include <errno.h>
+#include <float.h>
#include <math.h>
#include <math_private.h>
@@ -136,6 +137,10 @@ __expm1l (long double x)
if (x < minarg)
return (4.0/big - 1.0L);
+ /* Avoid internal underflow when result does not underflow. */
+ if (fabsl (x) < 0x1p-113L && fabsl (x) >= LDBL_MIN)
+ return x;
+
/* Express x = ln 2 (k + remainder), remainder not exceeding 1/2. */
xx = C1 + C2; /* ln 2. */
px = __floorl (0.5 + x / xx);