aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--NEWS2
-rw-r--r--sysdeps/ieee754/ldbl-128/e_lgammal_r.c4
3 files changed, 8 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 3e806a2..bfca05b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2013-12-22 Joseph Myers <joseph@codesourcery.com>
+ [BZ #16337]
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r):
+ Calculate results for small negative arguments directly rather
+ than using reflection formula with special underflow handling.
+
* sysdeps/mach/hurd/Implies: Change unix/bsd/bsd4.4 to unix/bsd.
* sysdeps/unix/bsd/syscalls.list (chflags): Add entry from
sysdeps/unix/bsd/bsd4.4/syscalls.list.
diff --git a/NEWS b/NEWS
index 75c69ec..a07df8c 100644
--- a/NEWS
+++ b/NEWS
@@ -22,7 +22,7 @@ Version 2.19
15966, 15985, 15988, 15997, 16032, 16034, 16036, 16037, 16038, 16041,
16055, 16071, 16072, 16074, 16077, 16078, 16103, 16112, 16143, 16144,
16146, 16150, 16151, 16153, 16167, 16172, 16195, 16214, 16245, 16271,
- 16274, 16283, 16289, 16293, 16314, 16316, 16330, 16338, 16356.
+ 16274, 16283, 16289, 16293, 16314, 16316, 16330, 16337, 16338, 16356.
* The public headers no longer use __unused nor __block. This change is to
support compiling programs that are derived from BSD sources and use
diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
index 2b44afb..23ab9b9 100644
--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
@@ -782,6 +782,8 @@ __ieee754_lgammal_r (long double x, int *signgamp)
*signgamp = -1;
else
*signgamp = 1;
+ if (q < 0x1p-120L)
+ return -__logl (q);
z = q - p;
if (z > 0.5L)
{
@@ -789,8 +791,6 @@ __ieee754_lgammal_r (long double x, int *signgamp)
z = p - q;
}
z = q * __sinl (PIL * z);
- if (z == 0.0L)
- return (*signgamp * huge * huge);
w = __ieee754_lgammal_r (q, &i);
z = __logl (PIL / z) - w;
return (z);