Fix ldbl-128 / ldbl-128ibm lgammal spurious underflow (bug 16400).

This patch fixes bug 16400, spurious underflow exceptions for ldbl-128
/ ldbl-128ibm lgammal with small positive arguments, by just using
-__logl (x) as the result in the problem cases (similar to the
previous fix for problems with small negative arguments).

Tested powerpc32, and also tested on mips64 that this does not require
ulps regeneration for the ldbl-128 case.

	* sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r):
	Return -__logl (x) for small positive arguments without evaluating
	a polynomial.
This commit is contained in:
Joseph Myers 2014-01-06 18:20:20 +00:00
parent 5fd3eccbea
commit eb3fc44b56
3 changed files with 11 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2014-01-06 Joseph Myers <joseph@codesourcery.com>
[BZ #16400]
* sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r):
Return -__logl (x) for small positive arguments without evaluating
a polynomial.
2014-01-06 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/sys/ptrace.h (ptrace_peeksiginfo_args):

2
NEWS
View File

@ -24,7 +24,7 @@ Version 2.19
16112, 16143, 16144, 16146, 16150, 16151, 16153, 16167, 16172, 16195,
16214, 16245, 16271, 16274, 16283, 16289, 16293, 16314, 16316, 16330,
16337, 16338, 16356, 16365, 16366, 16369, 16372, 16375, 16379, 16384,
16385, 16386, 16390.
16385, 16386, 16390, 16400.
* Slovenian translations for glibc messages have been contributed by the
Translation Project's Slovenian team of translators.

View File

@ -805,7 +805,9 @@ __ieee754_lgammal_r (long double x, int *signgamp)
{
case 0:
/* log gamma (x + 1) = log(x) + log gamma(x) */
if (x <= 0.125)
if (x < 0x1p-120L)
return -__logl (x);
else if (x <= 0.125)
{
p = x * neval (x, RN1, NRN1) / deval (x, RD1, NRD1);
}