The ldbl-128ibm implementation of sqrtl wrongly returns an sNaN for
signaling NaN arguments. This patch fixes it to quiet its argument,
using the same x * x + x return for infinities and NaNs as the dbl-64
implementation uses to ensure that +Inf maps to +Inf while -Inf and
NaN map to NaN.
Tested for powerpc.
[BZ #20153]
* sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c (__ieee754_sqrtl): Return
x * x + x for infinities and NaNs.
2016-05-26 Joseph Myers <joseph@codesourcery.com>
+ [BZ #20153]
+ * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c (__ieee754_sqrtl): Return
+ x * x + x for infinities and NaNs.
+
[BZ #20151]
* sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_j0l): Add NaN
argument to itself before returning result.
return c.x * i;
}
else {
- if (k>=INT64_C(0x7ff0000000000000)) {
- if (a.i[0] == INT64_C(0xfff0000000000000))
- return (big1-big1)/(big-big); /* sqrt (-Inf) = NaN. */
- return x; /* sqrt (NaN) = NaN, sqrt (+Inf) = +Inf. */
- }
+ if (k>=INT64_C(0x7ff0000000000000))
+ /* sqrt (-Inf) = NaN, sqrt (NaN) = NaN, sqrt (+Inf) = +Inf. */
+ return x * x + x;
if (x == 0) return x;
if (x < 0) return (big1-big1)/(big-big);
return tm256*__ieee754_sqrtl(x*t512);