mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-14 01:00:07 +00:00
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.
This commit is contained in:
parent
40b7fbf273
commit
b987917e6a
@ -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>
|
2017-02-10 Wilco Dijkstra <wdijkstr@arm.com>
|
||||||
|
|
||||||
* string/bits/string2.h (strchr): Remove define.
|
* string/bits/string2.h (strchr): Remove define.
|
||||||
|
@ -829,12 +829,7 @@ _Float128
|
|||||||
_Float128 xx, xinv, z, p, q, c, s, cc, ss;
|
_Float128 xx, xinv, z, p, q, c, s, cc, ss;
|
||||||
|
|
||||||
if (! isfinite (x))
|
if (! isfinite (x))
|
||||||
{
|
return 1 / (x + x * x);
|
||||||
if (x != x)
|
|
||||||
return x + x;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (x <= 0)
|
if (x <= 0)
|
||||||
{
|
{
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
|
@ -847,12 +847,7 @@ __ieee754_y1l (_Float128 x)
|
|||||||
_Float128 xx, xinv, z, p, q, c, s, cc, ss;
|
_Float128 xx, xinv, z, p, q, c, s, cc, ss;
|
||||||
|
|
||||||
if (! isfinite (x))
|
if (! isfinite (x))
|
||||||
{
|
return 1 / (x + x * x);
|
||||||
if (x != x)
|
|
||||||
return x + x;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (x <= 0)
|
if (x <= 0)
|
||||||
{
|
{
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user