diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128/s_log1pl.c | 22 |
2 files changed, 17 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog index 9621e02c1f..86bed48e1f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-07-23 Stephen L Moshier <moshier@mediaone.net> + + * sysdeps/ieee754/ldbl-128/s_log1pl.c (__log1pl): Return proper + sign for 0 input and set divide by zero exception for -1 input. + Return argument if NaN or infinity. + 2001-07-23 Andreas Jaeger <aj@suse.de> * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Add some deltas. diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c index fcb6ecc8a4..c19bea83d1 100644 --- a/sysdeps/ieee754/ldbl-128/s_log1pl.c +++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c @@ -120,23 +120,23 @@ __log1pl (long double xm1) int32_t ix; int e; - x = xm1 + 1.0L; - - /* Test for domain errors. */ - if (x > maxlog) - return (big * big); - - /* Test for NaN input. */ + /* Test for NaN or infinity input. */ u.value = xm1; ix = u.parts32.w0 & 0x7fffffff; - if ((ix >= 0x7fff0000) - && (((ix & 0xffff) | u.parts32.w1 | u.parts32.w2 | u.parts32.w3) != 0)) - return x; + if (ix >= 0x7fff0000) + return xm1; + + /* log1p(+- 0) = +- 0. */ + if ((ix == 0) && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) + return xm1; + + x = xm1 + 1.0L; + /* log1p(-1) = -inf */ if (x <= 0.0L) { if (x == 0.0L) - return (-big * big); + return (-1.0L / zero); else return (zero / zero); } |