aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel F. T. Gomes <gftg@linux.vnet.ibm.com>2017-01-06 13:05:30 -0200
committerGabriel F. T. Gomes <gftg@linux.vnet.ibm.com>2017-02-12 18:30:38 -0200
commitb987917e6aa7ffe2fd74f0b6a989438e6edd0727 (patch)
treeb8b52e949fb772130ffa853ec1f1e0a2944c87ff
parent40b7fbf27310d4f4a899aa2c54740dce5369ec70 (diff)
downloadglibc-b987917e6aa7ffe2fd74f0b6a989438e6edd0727.zip
glibc-b987917e6aa7ffe2fd74f0b6a989438e6edd0727.tar.gz
glibc-b987917e6aa7ffe2fd74f0b6a989438e6edd0727.tar.bz2
ldbl-128: Fix y0 and y1 for -Inf input [BZ #21130]
The Bessel functions of the second type (Yn) are not defined for negative input and should return NAN with the "invalid" exception raised, in these cases. However, current code checks for infinity and return zero, regardless of the sign. This error is exposed for long double when linking with -lieee. Without this flag, the error is not exposed, because the wrappers for these functions, which use __kernel_standard functionality, return the correct value. Tested for powerpc64le. [BZ #21130] * sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_y0l): Return NAN with the "invalid" exception raised when x is -Inf. * sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_y1l): Likewise.
-rw-r--r--ChangeLog7
-rw-r--r--sysdeps/ieee754/ldbl-128/e_j0l.c7
-rw-r--r--sysdeps/ieee754/ldbl-128/e_j1l.c7
3 files changed, 9 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index fac0e11..27f41f7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2017-02-12 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
+
+ [BZ #21130]
+ * sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_y0l): Return NAN
+ with the "invalid" exception raised when x is -Inf.
+ * sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_y1l): Likewise.
+
2017-02-10 Wilco Dijkstra <wdijkstr@arm.com>
* string/bits/string2.h (strchr): Remove define.
diff --git a/sysdeps/ieee754/ldbl-128/e_j0l.c b/sysdeps/ieee754/ldbl-128/e_j0l.c
index d711007..855b5a5 100644
--- a/sysdeps/ieee754/ldbl-128/e_j0l.c
+++ b/sysdeps/ieee754/ldbl-128/e_j0l.c
@@ -829,12 +829,7 @@ _Float128
_Float128 xx, xinv, z, p, q, c, s, cc, ss;
if (! isfinite (x))
- {
- if (x != x)
- return x + x;
- else
- return 0;
- }
+ return 1 / (x + x * x);
if (x <= 0)
{
if (x < 0)
diff --git a/sysdeps/ieee754/ldbl-128/e_j1l.c b/sysdeps/ieee754/ldbl-128/e_j1l.c
index 9e78230..db8dca0 100644
--- a/sysdeps/ieee754/ldbl-128/e_j1l.c
+++ b/sysdeps/ieee754/ldbl-128/e_j1l.c
@@ -847,12 +847,7 @@ __ieee754_y1l (_Float128 x)
_Float128 xx, xinv, z, p, q, c, s, cc, ss;
if (! isfinite (x))
- {
- if (x != x)
- return x + x;
- else
- return 0;
- }
+ return 1 / (x + x * x);
if (x <= 0)
{
if (x < 0)