diff options
author | Joseph Myers <joseph@codesourcery.com> | 2005-07-29 02:24:38 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2005-07-29 02:24:38 +0100 |
commit | b608d27a8e7fe2671c7f39795ede312ce783c94f (patch) | |
tree | ee36e0c8644cd166844d2e15df7eac1226e2f595 /gcc/real.c | |
parent | a560c83ad59db33cdd677feca540d093f84e1f55 (diff) | |
download | gcc-b608d27a8e7fe2671c7f39795ede312ce783c94f.zip gcc-b608d27a8e7fe2671c7f39795ede312ce783c94f.tar.gz gcc-b608d27a8e7fe2671c7f39795ede312ce783c94f.tar.bz2 |
re PR middle-end/21720 (GCC incorrectly rounds hex floats)
PR c/21720
* real.c (real_from_string): Set last bit if there is a nonzero
hex digit beyond GCC's internal precision.
testsuite:
* gcc.dg/hex-round-1.c: New test.
From-SVN: r102539
Diffstat (limited to 'gcc/real.c')
-rw-r--r-- | gcc/real.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -1789,6 +1789,10 @@ real_from_string (REAL_VALUE_TYPE *r, const char *str) |= (unsigned long) d << (pos % HOST_BITS_PER_LONG); pos -= 4; } + else if (d) + /* Ensure correct rounding by setting last bit if there is + a subsequent nonzero digit. */ + r->sig[0] |= 1; exp += 4; str++; } |