Fix ldbl-128ibm logl (1) sign of zero result (bug 19077).

The ldbl-128ibm implementation of logl produces a zero with the wrong
sign for logl (1) in FE_DOWNWARD mode.  This patch makes it explicitly
return 0.0L in that case, as in e.g. the ldbl-128 implementation.

Tested for powerpc.

	[BZ #19077]
	* sysdeps/ieee754/ldbl-128ibm/e_logl.c (__ieee754_logl): Return
	0.0L for argument 1.0L.
This commit is contained in:
Joseph Myers 2015-10-06 15:32:06 +00:00
parent d79b568926
commit 31d4459e42
3 changed files with 7 additions and 1 deletions

View File

@ -1,5 +1,9 @@
2015-10-06 Joseph Myers <joseph@codesourcery.com>
[BZ #19077]
* sysdeps/ieee754/ldbl-128ibm/e_logl.c (__ieee754_logl): Return
0.0L for argument 1.0L.
[BZ #19076]
* sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Divide by
constant 0.0L when computing infinite result.

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, 19076.
19049, 19050, 19059, 19071, 19076, 19077.
* The obsolete header <regexp.h> has been removed. Programs that require
this header must be updated to use <regex.h> instead.

View File

@ -219,6 +219,8 @@ __ieee754_logl(long double x)
/* On this interval the table is not used due to cancellation error. */
if ((x <= 1.0078125L) && (x >= 0.9921875L))
{
if (x == 1.0L)
return 0.0L;
z = x - 1.0L;
k = 64;
t = 1.0L;