diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2017-10-03 18:12:42 +0100 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2017-10-04 10:15:12 +0100 |
commit | 86c27ade1e44e29922d33676f950f7334edb37a7 (patch) | |
tree | f1a56c25057b1af6d66df83321beb906c1914fd6 /sysdeps/ieee754/flt-32 | |
parent | 8f8f8ef7aba40ef883291e4c4d95a419c3327d70 (diff) | |
download | glibc-86c27ade1e44e29922d33676f950f7334edb37a7.tar.gz glibc-86c27ade1e44e29922d33676f950f7334edb37a7.tar.xz glibc-86c27ade1e44e29922d33676f950f7334edb37a7.zip |
[BZ #22244] Fix yn(n,0) without SVID wrapper
Without SVID compat wrapper yn(n,0) and ynf(n,0) does not raise the divide-by-zero excpetion and it may return inf with the wrong sign for n < 0. [BZ #22244] * sysdeps/ieee754/dbl-64/e_jn.c (__ieee754_yn): Fix x == 0 case. * sysdeps/ieee754/flt-32/e_jnf.c (__ieee754_ynf): Likewise.
Diffstat (limited to 'sysdeps/ieee754/flt-32')
-rw-r--r-- | sysdeps/ieee754/flt-32/e_jnf.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sysdeps/ieee754/flt-32/e_jnf.c b/sysdeps/ieee754/flt-32/e_jnf.c index 82b9ba3300..4b78ecea6c 100644 --- a/sysdeps/ieee754/flt-32/e_jnf.c +++ b/sysdeps/ieee754/flt-32/e_jnf.c @@ -194,15 +194,15 @@ __ieee754_ynf(int n, float x) ix = 0x7fffffff&hx; /* if Y(n,NaN) is NaN */ if(__builtin_expect(ix>0x7f800000, 0)) return x+x; - if(__builtin_expect(ix==0, 0)) - return -HUGE_VALF+x; /* -inf and overflow exception. */ - if(__builtin_expect(hx<0, 0)) return zero/(zero*x); sign = 1; if(n<0){ n = -n; sign = 1 - ((n&1)<<1); } if(n==0) return(__ieee754_y0f(x)); + if(__builtin_expect(ix==0, 0)) + return -sign/zero; + if(__builtin_expect(hx<0, 0)) return zero/(zero*x); SET_RESTORE_ROUNDF (FE_TONEAREST); if(n==1) { ret = sign*__ieee754_y1f(x); |