http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56015
Bug #: 56015
Summary: Option -ffast-math reveals i*(a+bi) -> -b-bi, a
complex multiplication bug
Classification: Unclassified
Product: gcc
Version: 4.7.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: [email protected]
ReportedBy: [email protected]
With gfortran, optimization option "-O3 -ffast-math", more
precisely "-O3 -funsafe-math-optimizations -ffinite-math-only"
reveals a complex multiplication bug of
i*(a+bi) =
Good: -b+ai
Bug: -b-bi
Source:
! multiplyi.f -*-f90-*-
!!
program multiplyi
implicit none
complex*16 p(10)
p(:) = (0.1d0, 0.2d0)
p(:) = (0.0d0, 1.0d0) * p(:)
write(6,'(2f5.1)') p(1)
end program multiplyi
Compilation and execution:
$ gfortran --version
GNU Fortran (GCC) 4.7.2
$ gfortran -ffree-form -O3 -o nofast-math multiplyi.f && ./nofast-math
-0.2 0.1
$ gfortran -ffree-form -O3 -ffast-math -o fast-math multiplyi.f && ./fast-math
-0.2 -0.2
Details:
* I could reproduce this bug with gcc-4.4.6, 4.6.3, and 4.7.2.
* I could reproduce it on Intel Core i5 and Xeon5650 (64bit)
and VIA C7-M (32bit).
* To reproduce this bug, the variable p(10) should not be an
array in 4.6.3, but it should be an array in 4.7.2.
Tank you for your constant efforts on gfortran,
Takeshi