From 514abd20feb847b3d2b0816f634a471c3c82c632 Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Mon, 23 Jul 2001 08:54:31 +0000 Subject: Update. 2001-07-23 Stephen L Moshier * sysdeps/ieee754/ldbl-128/s_expm1l.c (__expm1l): Return proper sign for 0 input. Return NaN with no exception for NaN input. --- sysdeps/ieee754/ldbl-128/s_expm1l.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'sysdeps/ieee754') 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); -- cgit v1.2.3