re PR libfortran/21376 (libfortran "E" output format causes FPE)
authorPeter Wainwright <prw@ceiriog1.demon.co.uk>
Sun, 22 May 2005 21:17:42 +0000 (21:17 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Sun, 22 May 2005 21:17:42 +0000 (21:17 +0000)
PR libfortran/21376
* io/write.c (output_float): Rework logic to avoid call to log10
with argument equal to zero.

From-SVN: r100068

libgfortran/ChangeLog
libgfortran/io/write.c

index 7e34ec8648305190a60cd5390e5c59130b1a5741..07154824854a0f535e6c53b0b7ee6e2504941545 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 36fee92598864143e2ceae0a4d20eeb7bb06b3a9..793031a9375f3f283da295bd166f8e30f30a6f90 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