aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/ieee754/ldbl-128/s_log1pl.c22
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);
}