re PR libfortran/28354 ([4.1 Only] 0.99999 printed as 0. instead of 1. by format...
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 28 Aug 2006 05:14:05 +0000 (05:14 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 28 Aug 2006 05:14:05 +0000 (05:14 +0000)
2006-08-27  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libgfortran/28354
* io/write.c: Check for special case of zero precision in format
and pre-round the real value.

From-SVN: r116502

libgfortran/ChangeLog
libgfortran/io/write.c

index 773f80636dbe0104da39d0dc7f026faad1f670ef..7151344be7e7ce6c136e373f0e003557c7c249be 100644 (file)
@@ -1,3 +1,9 @@
+2006-08-27  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libgfortran/28354
+       * io/write.c: Check for special case of zero precision in format
+       and pre-round the real value.
+
 2006-08-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/25828
index bee367c49ae70f3343df37cd84e105c8d8aee3cc..79018ccd4fadc7e57a3a5312d5e8db98ae160862 100644 (file)
@@ -426,6 +426,15 @@ output_float (st_parameter_dt *dtp, const fnode *f, GFC_REAL_LARGEST value)
   if (value < 0)
     value = -value;
 
+  /* Special case when format specifies no digits after the decimal point.  */
+  if (d == 0)
+    {
+      if (value < 0.5)
+       value = 0.0;
+      else if (value < 1.0)
+       value = value + 0.5;
+    }
+
   /* Printf always prints at least two exponent digits.  */
   if (value == 0)
     edigits = 2;