about summary refs log tree commit diff
path: root/sysdeps/ieee754/ldbl-128
diff options
context:
space:
mode:
authorTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>2017-02-17 09:07:57 -0200
committerTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>2017-02-17 09:07:57 -0200
commit51b34a9c47e4228873788ad66699c328e27a3295 (patch)
treedae7359c968c1a37cf775e42b93e9d93500b456d /sysdeps/ieee754/ldbl-128
parentf0166c1643038e0ca42d300ddae36c00f400f4cf (diff)
downloadglibc-51b34a9c47e4228873788ad66699c328e27a3295.tar.gz
glibc-51b34a9c47e4228873788ad66699c328e27a3295.tar.xz
glibc-51b34a9c47e4228873788ad66699c328e27a3295.zip
Fix lgamma*, log10* and log2* results [BZ #21171]
lgamma(-x) should return +Inf and raise divide-by-zero.
log10(+-0) and log2(+-0) should return -Inf and raise divide-by-zero.

Tested on powerpc, powerpc64, powerpc64le and x86_64.

	[BZ #21171]
	* sysdeps/ieee754/dbl-64/e_lgamma_r.c (__ieee754_lgamma_r): Return
	+Inf and raise divide-by-zero when x is negative.
	* sysdeps/ieee754/flt-32/e_lgammaf_r.c (__ieee754_lgammaf_r): Likewise.
	* sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r): Likewise.

	* sysdeps/ieee754/dbl-64/e_log10.c (__ieee754_log10):  Return
	-Inf and raise divide-by-zero when x = +-0.
	* sysdeps/ieee754/dbl-64/e_log2.c (__ieee754_log2): Likewise.
	* sysdeps/ieee754/flt-32/e_log10f.c (__ieee754_log10f):	Likewise.
	* sysdeps/ieee754/flt-32/e_log2f.c (__ieee754_log2f): Likewise.
	* sysdeps/ieee754/ldbl-128/e_log10l.c (__ieee754_log10l): Likewise.
	* sysdeps/ieee754/ldbl-128/e_log2l.c (__ieee754_log2l): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_log10l.c (__ieee754_log10l): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_log2l.c (__ieee754_log2l): Likewise.
Diffstat (limited to 'sysdeps/ieee754/ldbl-128')
-rw-r--r--sysdeps/ieee754/ldbl-128/e_lgammal_r.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/e_log10l.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/e_log2l.c2
3 files changed, 3 insertions, 3 deletions
diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
index 6f55b4da6a..bef2601bce 100644
--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
@@ -782,7 +782,7 @@ __ieee754_lgammal_r (_Float128 x, int *signgamp)
       q = -x;
       p = __floorl (q);
       if (p == q)
-	return (one / (p - p));
+	return (one / __fabsl (p - p));
       _Float128 halfp = p * L(0.5);
       if (halfp == __floorl (halfp))
 	*signgamp = -1;
diff --git a/sysdeps/ieee754/ldbl-128/e_log10l.c b/sysdeps/ieee754/ldbl-128/e_log10l.c
index f73cd34ebb..c992f6e5ee 100644
--- a/sysdeps/ieee754/ldbl-128/e_log10l.c
+++ b/sysdeps/ieee754/ldbl-128/e_log10l.c
@@ -187,7 +187,7 @@ __ieee754_log10l (_Float128 x)
 /* Test for domain */
   GET_LDOUBLE_WORDS64 (hx, lx, x);
   if (((hx & 0x7fffffffffffffffLL) | lx) == 0)
-    return (-1 / (x - x));
+    return (-1 / __fabsl (x));		/* log10l(+-0)=-inf  */
   if (hx < 0)
     return (x - x) / (x - x);
   if (hx >= 0x7fff000000000000LL)
diff --git a/sysdeps/ieee754/ldbl-128/e_log2l.c b/sysdeps/ieee754/ldbl-128/e_log2l.c
index 26a8d7e6fa..cf4a380f16 100644
--- a/sysdeps/ieee754/ldbl-128/e_log2l.c
+++ b/sysdeps/ieee754/ldbl-128/e_log2l.c
@@ -181,7 +181,7 @@ __ieee754_log2l (_Float128 x)
 /* Test for domain */
   GET_LDOUBLE_WORDS64 (hx, lx, x);
   if (((hx & 0x7fffffffffffffffLL) | lx) == 0)
-    return (-1 / (x - x));
+    return (-1 / __fabsl (x));		/* log2l(+-0)=-inf  */
   if (hx < 0)
     return (x - x) / (x - x);
   if (hx >= 0x7fff000000000000LL)