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]

[Patch, libfortran] PR 48488 Fix comments


Hi all,

now that we fixed real output, I update the comments per the patch
below and committed.

Index: io/write.c
===================================================================
--- io/write.c  (revision 173168)
+++ io/write.c  (working copy)
@@ -1456,10 +1456,18 @@ set_fnode_default (st_parameter_dt *dtp,
       break;
     }
 }
-/* Output a real number with default format.
-   This is 1PG14.7E2 for REAL(4), 1PG23.15E3 for REAL(8),
-   1PG28.19E4 for REAL(10) and 1PG43.34E4 for REAL(16).  */
-// FX -- FIXME: should we change the default format for __float128-real(16)?
+
+/* Output a real number with default format.  To guarantee that a
+   binary -> decimal -> binary roundtrip conversion recovers the
+   original value, IEEE 754-2008 requires 9, 17, 21 and 36 significant
+   digits for REAL kinds 4, 8, 10, and 16, respectively. Thus, we use
+   1PG16.9E2 for REAL(4), 1PG25.17E3 for REAL(8), 1PG30.21E4 for
+   REAL(10) and 1PG45.36E4 for REAL(16). The exception is that the
+   Fortran standard requires outputting an extra digit when the scale
+   factor is 1 and when the magnitude of the value is such that E
+   editing is used. However, gfortran compensates for this, and thus
+   for list formatted the same number of significant digits is
+   generated both when using F and E editing.  */

 void
 write_real (st_parameter_dt *dtp, const char *source, int length)
@@ -1472,6 +1480,8 @@ write_real (st_parameter_dt *dtp, const
   dtp->u.p.scale_factor = org_scale;
 }

+/* Similar to list formatted REAL output, for kPG0 where k > 0 we
+   compensate for the extra digit.  */

 void
 write_real_g0 (st_parameter_dt *dtp, const char *source, int length, int d)


-- 
Janne Blomqvist


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