This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch, libgfortran] Fix numerous formatting bugs


On 04/25/2011 07:36 AM, Janne Blomqvist wrote:
On Mon, Apr 25, 2011 at 14:44, Jerry DeLisle<jvdelisle@frontier.com> wrote:
On 04/25/2011 03:48 AM, Janne Blomqvist wrote:
Now, for one of the testcase changes:

--- gcc/testsuite/gfortran.dg/char4_iunit_1.f03 (revision 172909)
+++ gcc/testsuite/gfortran.dg/char4_iunit_1.f03 (working copy)
@@ -24,11 +24,11 @@ program char4_iunit_1
    write(string, *) .true., .false. , .true.
    if (string .ne. 4_" T F T                                    ") call
abort
    write(string, *) 1.2345e-06, 4.2846e+10_8
-  if (string .ne. 4_"  1.23450002E-06   42846000000.000000     ") call
abort
+  if (string .ne. 4_"  1.234500019E-06   42846000000.000000    ") call
abort

This looks wrong. For correctly rounded REAL(4) output, we need 9
significant digits, but here we print 10.


Well, I bumped it up for defaults based on pr48488 comment #2 shown below.

Yes, that comment in the PR is correct; to guarantee that a binary->ascii->binary roundtrip preserves the original binary value (with the default "round to nearest, break on even" rounding mode), one must output at least {9, 17, 21, 36} significant digits for real kinds 4, 8, 10, and 16, respectively (yes, I double-checked IEEE 754-2008 that this is indeed correct).

Since for the G edit descriptor d is equivalent to the number of
significant digits, AFAICS the write.c patch below is correct and the
bug must be elsewhere, no?

Looking for it.


Jerry


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]