diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/ieee754/ldbl-128/s_expm1l.c | 5 |
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); |