From c220bdaec9733bbeb9bfd96dedb706db9af73338 Mon Sep 17 00:00:00 2001 From: Peter Wainwright Date: Sun, 22 May 2005 21:17:42 +0000 Subject: [PATCH] re PR libfortran/21376 (libfortran "E" output format causes FPE) 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 | 6 ++++++ libgfortran/io/write.c | 7 +++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 7e34ec86483..07154824854 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2005-05-22 Francois-Xavier Coudert + + 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 * configure.ac: Check for trunc and truncf in libm. diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c index 36fee925988..793031a9375 100644 --- a/libgfortran/io/write.c +++ b/libgfortran/io/write.c @@ -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 -- 2.30.2