http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48787
Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|Invalid UP rounding with F |Invalid UP/DOWN rounding
|editing |with F editing
--- Comment #17 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> 2011-05-03
11:45:06 UTC ---
The first part of this for DOWN side is easy:
Index: write_float.def
===================================================================
--- write_float.def (revision 173234)
+++ write_float.def (working copy)
@@ -242,7 +242,13 @@ output_float (st_parameter_dt *dtp, const fnode *f
if (!sign_bit)
goto skip;
rchar = '0';
- break;
+ /* Scan for trailing zeros to see if we really need to round it. */
+ for(i = nbefore + nafter; i < ndigits; i++)
+ {
+ if (digits[i] != '0')
+ goto do_rnd;
+ }
+ goto skip;
case ROUND_NEAREST:
/* Round compatible unless there is a tie. A tie is a 5 with
all trailing zero's. */
The last two cases with + or - .09 is more subtle. We are incorrectly forcing
it to zero and not rounding at all. I am still working at that part.