Message ID | li3hm5$hus$1@ger.gmane.org |
---|---|
State | New |
Headers | show |
On Wed, Apr 09, 2014 at 03:24:21PM +0200, Stefan Liebler wrote: > Hi, > > on S390 test-double fails for log1pl(-1) with infinity has wrong > sign in rounding mode FE_DOWNWARD. See Bug 16823. > In this rounding mode, (x-x) = -0. > In all other rounding modes, (x-x) = +0. > A division with divisor -0 leads to +inf, while +0 results in -inf > as expected. This patch changes the divisor to a const +0. > Tested on s390/s390x. > > Is this okay? > Looks ok. Perhaps we could add constants for infinity and nan would to write return value directly.
On 04/10/2014 12:09 AM, Ondřej Bílka wrote: > On Wed, Apr 09, 2014 at 03:24:21PM +0200, Stefan Liebler wrote: >> Hi, >> >> on S390 test-double fails for log1pl(-1) with infinity has wrong >> sign in rounding mode FE_DOWNWARD. See Bug 16823. >> In this rounding mode, (x-x) = -0. >> In all other rounding modes, (x-x) = +0. >> A division with divisor -0 leads to +inf, while +0 results in -inf >> as expected. This patch changes the divisor to a const +0. >> Tested on s390/s390x. >> >> Is this okay? >> > Looks ok. > > Perhaps we could add constants for infinity and nan would to write > return value directly. > Thanks. Returning a constant of infinity is not enough. In this case an divide by zero exception should be raised, because log(0) is not defined.
diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c index d991e8a..6c1970b 100644 --- a/sysdeps/ieee754/ldbl-128/s_log1pl.c +++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c @@ -150,9 +150,9 @@ __log1pl (long double xm1) if (x <= 0.0L) { if (x == 0.0L) - return (-1.0L / (x - x)); + return (-1.0L / zero); else - return (zero / (x - x)); + return (zero / zero); } /* Separate mantissa from exponent. */