This is the mail archive of the
mailing list for the GNU Fortran project.
Re: [patch, libgfortran] PR48906 Wrong rounding results with -m32
On 06/11/2011 12:23 AM, Thomas Henlich wrote:
I don't agree with this; with the patch we now output 10 significant
digits, whereas 9 is sufficient for a binary->ascii->binary roundtrip.
So please retain the "reduce d by one when E editing is used" thing
for list format and G0. This is just a side effect of using 1PGw.d
format for list format and G0 in order to avoid duplicating code, but
we don't need to follow this particular craziness that is due to how
the scale factor is specified in the standard.
I hadn't noticed this, but I agree with Janne.
It should be easy to implement:
After the switch between F and E editing, we just need to shift the
decimal point and decrement the exponent. No new rounding is required,
because we keep the number of significant digits.
Our default formats for kind=4 are:
set_fnode_default (st_parameter_dt *dtp, fnode *f, int length)
f->format = FMT_G;
f->u.real.w = 16;
f->u.real.d = 9;
f->u.real.e = 2;
This was established as solution to PR48488 where we had two choices for
selecting the significant digits. Nine significant digits was established as a
requirement to guarantee round trip in all cases. The char4_iunit_1.f03 test
case was revised because after we corrected the formatting in PR48906, it
started to fail and I observed the test case was looking for the wrong number of
Based on this, I would suggest we leave it as I have it, which is correct.