OSDN Git Service

PR libfortran/21376
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 22 May 2005 21:17:42 +0000 (21:17 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 22 May 2005 21:17:42 +0000 (21:17 +0000)
* io/write.c (output_float): Rework logic to avoid call to log10
with argument equal to zero.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100068 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/io/write.c

index 7e34ec8..0715482 100644 (file)
@@ -1,3 +1,9 @@
+2005-05-22  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       PR libfortran/21376
+       * io/write.c (output_float): Rework logic to avoid call to log10
+       with argument equal to zero.
+
 2005-05-21  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        * configure.ac: Check for trunc and truncf in libm.
index 36fee92..793031a 100644 (file)
@@ -296,6 +296,7 @@ output_float (fnode *f, double value)
   int nblanks;
   int i;
   sign_t sign;
+  double abslog;
 
   ft = f->format;
   w = f->u.real.w;
@@ -320,9 +321,11 @@ output_float (fnode *f, double value)
     edigits = 2;
   else
     {
-      edigits = 1 + (int) log10 (fabs(log10 (value)));
-      if (edigits < 2)
+      abslog = fabs(log10 (value));
+      if (abslog < 100)
        edigits = 2;
+      else
+        edigits = 1 + (int) log10 (abslog);
     }
 
   if (ft == FMT_F || ft == FMT_EN