diff options
author | Andreas Jaeger <aj@suse.de> | 2001-07-23 08:54:31 +0000 |
---|---|---|
committer | Andreas Jaeger <aj@suse.de> | 2001-07-23 08:54:31 +0000 |
commit | 514abd20feb847b3d2b0816f634a471c3c82c632 (patch) | |
tree | 3d15c38655fcbdafe21387ae7319776caeee97b5 | |
parent | 1a9cbbbf75b04e39f56f932a0b27f6173ba5dd43 (diff) | |
download | glibc-514abd20feb847b3d2b0816f634a471c3c82c632.tar.gz glibc-514abd20feb847b3d2b0816f634a471c3c82c632.tar.xz glibc-514abd20feb847b3d2b0816f634a471c3c82c632.zip |
Update.
2001-07-23 Stephen L Moshier <moshier@mediaone.net> * sysdeps/ieee754/ldbl-128/s_expm1l.c (__expm1l): Return proper sign for 0 input. Return NaN with no exception for NaN input.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128/s_expm1l.c | 24 |
2 files changed, 19 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog index 73e157d750..d284e62c7b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2001-07-23 Stephen L Moshier <moshier@mediaone.net> + + * sysdeps/ieee754/ldbl-128/s_expm1l.c (__expm1l): Return proper + sign for 0 input. Return NaN with no exception for NaN input. + 2001-07-23 Ulrich Drepper <drepper@redhat.com> * iconv/gconv_builtin.h: ISO-106464/UTF-8/ transformation must diff --git a/sysdeps/ieee754/ldbl-128/s_expm1l.c b/sysdeps/ieee754/ldbl-128/s_expm1l.c index f662ee9093..c03635e2ab 100644 --- a/sysdeps/ieee754/ldbl-128/s_expm1l.c +++ b/sysdeps/ieee754/ldbl-128/s_expm1l.c @@ -81,14 +81,6 @@ __expm1l (long double x) ieee854_long_double_shape_type u; int k; - /* Overflow. */ - if (x > maxlog) - return (big * big); - - /* Minimum value. */ - if (x < minarg) - return (4.0 / big - 1.0L); - /* Detect infinity and NaN. */ u.value = x; ix = u.parts32.w0; @@ -104,10 +96,22 @@ __expm1l (long double x) else return x; } - /* NaN. */ - return (x + x); + /* NaN. No invalid exception. */ + return x; } + /* expm1(+- 0) = +- 0. */ + if ((ix == 0) && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) + return x; + + /* Overflow. */ + if (x > maxlog) + return (big * big); + + /* Minimum value. */ + if (x < minarg) + return (4.0/big - 1.0L); + /* Express x = ln 2 (k + remainder), remainder not exceeding 1/2. */ xx = C1 + C2; /* ln 2. */ px = __floorl (0.5 + x / xx); |