------- Comment #3 from fxcoudert at gcc dot gnu dot org 2009-06-15 18:32 ------- This is not darwin-specific, I also see it happening on x86_64-linux.
And what's more, the output changes between -m32 and -m64. $ cat u.f90 integer(8), parameter :: l = z'5fe6eb3be0000000' integer, parameter :: ni = 3 integer :: i, j, n integer(8) :: k real(8) :: a, b, e, m, s equivalence (b, k) a = 1.0d0 e = epsilon(1.0)/2.0d0**4 m = 0.0d0 s = 0.0d0 n = 0 do n = n + 1 b = a k = l - ishft(k, -1_8) do i = 1, ni b = b*(1.5-(0.5*a)*b*b) end do b = b + b*(0.5-(0.5*a)*b*b) ! b = 1.0d0/sqrt(a) m = max(m, abs(a*b*b - 1.0d0)) s = s + abs(a*b*b - 1.0d0) a = a + e if (a == 2.0d0) exit end do print *, n, m/epsilon(a), s/(n*epsilon(a)) end $ gfortran -m64 -O3 u.f90 && time ./a.out 134217728 2.0000000000000000 0.36966567113995552 ./a.out 3.05s user 0.00s system 100% cpu 3.049 total $ gfortran -m32 -O3 u.f90 && time ./a.out 134217728 9.76562500000000000E-004 1.82069155926001258E-004 ./a.out 6.80s user 0.00s system 99% cpu 6.854 total $ gfortran -m32 -O3 u.f90 -ffast-math && time ./a.out 134217728 1.46484375000000000E-003 2.97074087939108722E-004 ./a.out 6.74s user 0.00s system 99% cpu 6.743 total $ gfortran -m64 -O3 u.f90 -ffast-math && time ./a.out 134217728 3.0000000000000000 0.59681034088134766 ./a.out 3.18s user 0.00s system 99% cpu 3.178 total -- fxcoudert at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- GCC build triplet|i686-apple-darwin9 | GCC host triplet|i686-apple-darwin9 | GCC target triplet|i686-apple-darwin9 |i686 Known to fail| |4.4.0 4.5.0 Last reconfirmed|2008-05-15 09:06:21 |2009-06-15 18:32:39 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36241