Hi! I've noticed ../../../libquadmath/math/fmaq.c:83:4: warning: floating constant truncated to zero [-Woverflow] warning and a quick grep revealed a bunch of other bugs, mostly introduced during the recent ports from newer glibc.
Built on x86_64-linux, committed to trunk. 2012-12-13 Jakub Jelinek <ja...@redhat.com> * math/cbrtq.c (cbrtq): Use Q suffixed floating point constants instead of L suffixed ones. * math/fmaq.c (fmaq): Likewise. * math/rintq.c (TWO112): Likewise. --- libquadmath/math/cbrtq.c.jj 2012-11-02 09:01:48.000000000 +0100 +++ libquadmath/math/cbrtq.c 2012-12-13 13:32:26.310751675 +0100 @@ -88,11 +88,11 @@ cbrtq ( __float128 x) /* Approximate cube root of number between .5 and 1, peak relative error = 1.2e-6 */ - x = ((((1.3584464340920900529734e-1L * x - - 6.3986917220457538402318e-1L) * x - + 1.2875551670318751538055e0L) * x - - 1.4897083391357284957891e0L) * x - + 1.3304961236013647092521e0L) * x + 3.7568280825958912391243e-1L; + x = ((((1.3584464340920900529734e-1Q * x + - 6.3986917220457538402318e-1Q) * x + + 1.2875551670318751538055e0Q) * x + - 1.4897083391357284957891e0Q) * x + + 1.3304961236013647092521e0Q) * x + 3.7568280825958912391243e-1Q; /* exponent divided by 3 */ if (e >= 0) @@ -122,9 +122,9 @@ cbrtq ( __float128 x) x = ldexpq (x, e); /* Newton iteration */ - x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333L; - x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333L; - x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333L; + x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333Q; + x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333Q; + x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333Q; if (sign < 0) x = -x; --- libquadmath/math/fmaq.c.jj 2012-11-16 12:39:17.000000000 +0100 +++ libquadmath/math/fmaq.c 2012-12-13 13:30:17.999491200 +0100 @@ -80,7 +80,7 @@ fmaq (__float128 x, __float128 y, __floa < IEEE854_FLOAT128_BIAS - FLT128_MANT_DIG - 2) { int neg = u.ieee.negative ^ v.ieee.negative; - __float128 tiny = neg ? -0x1p-16494L : 0x1p-16494L; + __float128 tiny = neg ? -0x1p-16494Q : 0x1p-16494Q; if (w.ieee.exponent >= 3) return tiny + z; /* Scaling up, adding TINY and scaling down produces the @@ -88,7 +88,7 @@ fmaq (__float128 x, __float128 y, __floa TINY has no effect and in other modes double rounding is harmless. But it may not produce required underflow exceptions. */ - v.value = z * 0x1p114L + tiny; + v.value = z * 0x1p114Q + tiny; if (TININESS_AFTER_ROUNDING ? v.ieee.exponent < 115 : (w.ieee.exponent == 0 @@ -100,7 +100,7 @@ fmaq (__float128 x, __float128 y, __floa volatile __float128 force_underflow = x * y; (void) force_underflow; } - return v.value * 0x1p-114L; + return v.value * 0x1p-114Q; } if (u.ieee.exponent + v.ieee.exponent >= 0x7fff + IEEE854_FLOAT128_BIAS - FLT128_MANT_DIG) @@ -296,7 +296,7 @@ fmaq (__float128 x, __float128 y, __floa { w.value = a1 + u.value; if (w.ieee.exponent == 227) - return w.value * 0x1p-226L; + return w.value * 0x1p-226Q; } /* v.ieee.mant_low & 2 is LSB bit of the result before rounding, v.ieee.mant_low & 1 is the round bit and j is our sticky @@ -305,8 +305,8 @@ fmaq (__float128 x, __float128 y, __floa w.ieee.mant_low = ((v.ieee.mant_low & 3) << 1) | j; w.ieee.negative = v.ieee.negative; v.ieee.mant_low &= ~3U; - v.value *= 0x1p-226L; - w.value *= 0x1p-2L; + v.value *= 0x1p-226Q; + w.value *= 0x1p-2Q; return v.value + w.value; } v.ieee.mant_low |= j; --- libquadmath/math/rintq.c.jj 2012-11-02 09:01:48.000000000 +0100 +++ libquadmath/math/rintq.c 2012-12-13 13:33:09.621501578 +0100 @@ -27,8 +27,8 @@ static const __float128 TWO112[2]={ - 5.19229685853482762853049632922009600E+33L, /* 0x406F000000000000, 0 */ - -5.19229685853482762853049632922009600E+33L /* 0xC06F000000000000, 0 */ + 5.19229685853482762853049632922009600E+33Q, /* 0x406F000000000000, 0 */ + -5.19229685853482762853049632922009600E+33Q /* 0xC06F000000000000, 0 */ }; __float128 Jakub