Message ID | 997588c1-5bcf-6339-4c7f-1339d91e45cf@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
On Fri, 2 Sep 2016, Paul E. Murphy wrote: > @@ -65,7 +65,7 @@ __ieee754_atan2l(_Float128 y, _Float128 x) > if(((ix|((lx|-lx)>>63))>0x7fff000000000000LL)|| > ((iy|((ly|-ly)>>63))>0x7fff000000000000LL)) /* x or y is NaN */ > return x+y; > - if(((hx-0x3fff000000000000LL)|lx)==0) return __atanl(y); /* x=1.0L */ > + if(((hx-0x3fff000000000000LL)|lx)==0) return __atanl(y); /* x=1 */ Is this change of a comment deliberate? I thought you were avoiding changing comments. > + L(0.0000000000000000000000000000000000000000E0), Is it deliberate that this (in e_logl.c) is not becoming integer 0 (it may well make sense to avoid converting to integers in such generated tables, but you didn't call it out in the patch description as a deliberate fixup)? Likewise in s_atanl.c.
On 09/08/2016 05:56 PM, Joseph Myers wrote: > On Fri, 2 Sep 2016, Paul E. Murphy wrote: > >> @@ -65,7 +65,7 @@ __ieee754_atan2l(_Float128 y, _Float128 x) >> if(((ix|((lx|-lx)>>63))>0x7fff000000000000LL)|| >> ((iy|((ly|-ly)>>63))>0x7fff000000000000LL)) /* x or y is NaN */ >> return x+y; >> - if(((hx-0x3fff000000000000LL)|lx)==0) return __atanl(y); /* x=1.0L */ >> + if(((hx-0x3fff000000000000LL)|lx)==0) return __atanl(y); /* x=1 */ > > Is this change of a comment deliberate? I thought you were avoiding > changing comments. This is a limitation of the conversion script. It only skips lines which start with a /* comment. This can be reverted via the fixup, patch or I can note the limitation in the commit message. > >> + L(0.0000000000000000000000000000000000000000E0), > > Is it deliberate that this (in e_logl.c) is not becoming integer 0 (it may > well make sense to avoid converting to integers in such generated tables, > but you didn't call it out in the patch description as a deliberate > fixup)? Likewise in s_atanl.c. The transformation is not applied to integral values written with an exponent-part 'E'. A trivial change to the transformation could catch those two cases, but it looks a little neater without. I can note this behavior in the commit message too.
On Thu, 8 Sep 2016, Paul E. Murphy wrote: > On 09/08/2016 05:56 PM, Joseph Myers wrote: > > On Fri, 2 Sep 2016, Paul E. Murphy wrote: > > > >> @@ -65,7 +65,7 @@ __ieee754_atan2l(_Float128 y, _Float128 x) > >> if(((ix|((lx|-lx)>>63))>0x7fff000000000000LL)|| > >> ((iy|((ly|-ly)>>63))>0x7fff000000000000LL)) /* x or y is NaN */ > >> return x+y; > >> - if(((hx-0x3fff000000000000LL)|lx)==0) return __atanl(y); /* x=1.0L */ > >> + if(((hx-0x3fff000000000000LL)|lx)==0) return __atanl(y); /* x=1 */ > > > > Is this change of a comment deliberate? I thought you were avoiding > > changing comments. > > This is a limitation of the conversion script. It only skips lines > which start with a /* comment. This can be reverted via the fixup, > patch or I can note the limitation in the commit message. The patch is OK with the comment change reverted.
diff --git a/sysdeps/ieee754/ldbl-128/e_exp10l.c b/sysdeps/ieee754/ldbl-128/e_exp10l.c index 9a2c8b8..9432b18 100644 --- a/sysdeps/ieee754/ldbl-128/e_exp10l.c +++ b/sysdeps/ieee754/ldbl-128/e_exp10l.c @@ -39,7 +39,7 @@ __ieee754_exp10l (_Float128 arg) return 1; u.value = arg; - u.parts64sw &= 0xfe00000000000000LL; + u.parts64.lsw &= 0xfe00000000000000LL; arg_high = u.value; arg_low = arg - arg_high; exp_high = arg_high * log10_high; diff --git a/sysdeps/ieee754/ldbl-128/e_jnl.c b/sysdeps/ieee754/ldbl-128/e_jnl.c index 1f80b00..470631e 100644 --- a/sysdeps/ieee754/ldbl-128/e_jnl.c +++ b/sysdeps/ieee754/ldbl-128/e_jnl.c @@ -328,7 +328,7 @@ __ieee754_ynl (int n, _Float128 x) if (x <= 0) { if (x == 0) - return ((n < 0 && (n & 1) != 0) ? 1 : -1) / 0; + return ((n < 0 && (n & 1) != 0) ? 1 : -1) / L(0.0); if (se & 0x80000000) return zero / (zero * x); } diff --git a/sysdeps/ieee754/ldbl-128/lgamma_negl.c b/sysdeps/ieee754/ldbl-128/lgamma_negl.c index 83542d3..e33eaff 100644 --- a/sysdeps/ieee754/ldbl-128/lgamma_negl.c +++ b/sysdeps/ieee754/ldbl-128/lgamma_negl.c @@ -450,7 +450,7 @@ __lgamma_negl (_Float128 x, int *signgamp) integers and determine the sign of the result. */ int i = __floorl (-2 * x); if ((i & 1) == 0 && i == -2 * x) - return 1 / 0; + return L(1.0) / L(0.0); _Float128 xn = ((i & 1) == 0 ? -i / 2 : (-i - 1) / 2); i -= 4; *signgamp = ((i & 2) == 0 ? -1 : 1); diff --git a/sysdeps/ieee754/ldbl-128/s_fmal.c b/sysdeps/ieee754/ldbl-128/s_fmal.c index c7f90d9..efafa8b 100644 --- a/sysdeps/ieee754/ldbl-128/s_fmal.c +++ b/sysdeps/ieee754/ldbl-128/s_fmal.c @@ -261,10 +261,10 @@ __fmal (_Float128 x, _Float128 y, _Float128 z) if (v.ieee.exponent > 228) return (a1 + u.d) * L(0x1p-228); /* If v.d * 0x1p-228L with round to zero is a subnormal above - or equal to LDBL_MIN / 2, then v.d * L(0x1p-228) shifts mantissa + or equal to LDBL_MIN / 2, then v.d * 0x1p-228L shifts mantissa down just by 1 bit, which means v.ieee.mantissa3 |= j would change the round bit, not sticky or guard bit. - v.d * L(0x1p-228) never normalizes by shifting up, + v.d * 0x1p-228L never normalizes by shifting up, so round bit plus sticky bit should be already enough for proper rounding. */ if (v.ieee.exponent == 228)