public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "dominiq at lps dot ens dot fr" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/37472] bad output on default-format write of double in common block with -m64 flag i Date: Mon, 22 Dec 2008 16:30:00 -0000 [thread overview] Message-ID: <20081222162935.1777.qmail@sourceware.org> (raw) In-Reply-To: <bug-37472-14147@http.gcc.gnu.org/bugzilla/> ------- Comment #16 from dominiq at lps dot ens dot fr 2008-12-22 16:29 ------- >From http://gcc.gnu.org/ml/fortran/2008-12/msg00284.html: > With Steve Kargl's help, the following simple patch was found to eliminate this output > problem on x86-64. I plan to commit under simple and makes sense to do rule. Is not the same problem lurking in if ((m > 0.0 && m < 0.1 - 0.05 / exp_d) || (m >= exp_d - 0.5 ) ||\ with 0.1 and 0.05? Also there is probably some room for optimization in this piece of code. For instance calculate_exp_* computes 10**d through an algorithm linear in d, while it could be computed in O(log2(d)) (see poweri in gcc/builtins.c). Also the following change: --- /opt/gcc/_gcc_clean/libgfortran/io/write_float.def 2008-12-21 22:31:05.000000000 +0100 +++ /opt/gcc/gcc-4.4-work/libgfortran/io/write_float.def 2008-12-22 16:27:10.000000000 +0100 @@ -640,8 +640,8 @@ GFC_REAL_ ## x temp;\ mid = (low + high) / 2;\ \ - temp = 0.1 * calculate_exp_ ## x (mid) - 0.5\ - * calculate_exp_ ## x (mid - d - 1);\ + temp = calculate_exp_ ## x (mid) \ + * (1.0 - 0.5 / exp_d) / 10;\ \ if (m < temp)\ { \ speeds up by ~2s the following test: character(80) s real*8 x, y integer i x=1.0 y=0.0 do i = 1, 10000000 write(s,*) y y = y + x end do print *, s end (still twice slower with gfortran than ifort or g77). Note that "temp = calculate_exp_ ## x (mid-1) * (1.0 - 0.5 / exp_d)" is slightly slower. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37472
next prev parent reply other threads:[~2008-12-22 16:30 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2008-09-11 0:57 [Bug fortran/37472] New: " sdirkse at gams dot com 2008-09-11 0:58 ` [Bug fortran/37472] " sdirkse at gams dot com 2008-09-11 6:03 ` burnus at gcc dot gnu dot org 2008-09-11 11:38 ` dominiq at lps dot ens dot fr 2008-09-11 14:29 ` burnus at gcc dot gnu dot org 2008-09-12 3:54 ` jvdelisle at gcc dot gnu dot org 2008-10-11 15:55 ` jvdelisle at gcc dot gnu dot org 2008-10-11 16:01 ` jvdelisle at gcc dot gnu dot org 2008-11-17 5:04 ` jvdelisle at gcc dot gnu dot org 2008-11-21 4:32 ` jvdelisle at gcc dot gnu dot org 2008-11-21 4:38 ` jvdelisle at gcc dot gnu dot org 2008-11-21 4:40 ` jvdelisle at gcc dot gnu dot org 2008-12-13 15:31 ` jvdelisle at gcc dot gnu dot org 2008-12-21 5:30 ` jvdelisle at gcc dot gnu dot org 2008-12-21 13:36 ` dominiq at lps dot ens dot fr 2008-12-22 14:56 ` jvdelisle at gcc dot gnu dot org 2008-12-22 16:30 ` dominiq at lps dot ens dot fr [this message] 2008-12-22 20:38 ` sdirkse at gams dot com 2008-12-22 21:04 ` kargl at gcc dot gnu dot org 2008-12-22 21:29 ` jvdelisle at gcc dot gnu dot org 2009-05-02 23:29 ` jvdelisle at gcc dot gnu dot org 2010-04-16 23:03 ` [Bug fortran/37472] bad output on default-format write of double in common block with -m64 jvdelisle at gcc dot gnu dot org
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20081222162935.1777.qmail@sourceware.org \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).