Fix ldbl-128ibm log1pl (-1) sign of infinity (bug 19076).

The ldbl-128ibm implementation of log1pl produces an infinity with the
wrong sign for log1pl (-1) in FE_DOWNWARD mode.  This patch fixes this
by changing a division (-1.0L / (x - x)) (incorrect in FE_DOWNWARD
mode) to (-1.0L / 0.0L) (correct in all rounding modes).

Tested for powerpc.

	[BZ #19076]
	* sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Divide by
	constant 0.0L when computing infinite result.
This commit is contained in:
Joseph Myers 2015-10-06 15:14:26 +00:00
parent 3670da6bfb
commit d79b568926
3 changed files with 8 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2015-10-06 Joseph Myers <joseph@codesourcery.com>
[BZ #19076]
* sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Divide by
constant 0.0L when computing infinite result.
2015-10-06 Florian Weimer <fweimer@redhat.com>
[BZ #10432]

2
NEWS
View File

@ -18,7 +18,7 @@ Version 2.23
18820, 18823, 18824, 18825, 18857, 18863, 18870, 18872, 18873, 18875,
18887, 18921, 18951, 18952, 18956, 18961, 18966, 18967, 18969, 18970,
18977, 18980, 18981, 18985, 19003, 19012, 19016, 19018, 19032, 19046,
19049, 19050, 19059, 19071.
19049, 19050, 19059, 19071, 19076.
* The obsolete header <regexp.h> has been removed. Programs that require
this header must be updated to use <regex.h> instead.

View File

@ -149,7 +149,7 @@ __log1pl (long double xm1)
if (x <= 0.0L)
{
if (x == 0.0L)
return (-1.0L / (x - x));
return (-1.0L / 0.0L);
else
return (zero / (x - x));
}