diff options
author | Peter Wainwright <prw@ceiriog1.demon.co.uk> | 2005-05-22 21:17:42 +0000 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2005-05-22 21:17:42 +0000 |
commit | c220bdaec9733bbeb9bfd96dedb706db9af73338 (patch) | |
tree | d78fc134f7ad49b35645da8bf676568d8cf59dd4 | |
parent | 8ba8f7e5571e59c2efeebf1b5da9f3491658a8c7 (diff) | |
download | gcc-c220bdaec9733bbeb9bfd96dedb706db9af73338.zip gcc-c220bdaec9733bbeb9bfd96dedb706db9af73338.tar.gz gcc-c220bdaec9733bbeb9bfd96dedb706db9af73338.tar.bz2 |
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
-rw-r--r-- | libgfortran/ChangeLog | 6 | ||||
-rw-r--r-- | libgfortran/io/write.c | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 7e34ec8..0715482 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -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. diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c index 36fee92..793031a 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 |