Hi,
Thank you for your interesting suggestion.
I made a sample code. I attach.
With GCC(gfortran) on FreeBSD, I get 1.9999999999999998 correctly.
I'll check result of mingw-w64 as soon as I arrive at my office tomorrow,
since I'm at home and the PC with mingw-w64 is there.
Best,
Takashi
On 08/06/20 23:36, Liu Hao wrote:
在 2020/8/6 13:25, Takashi Inoue 写道:
Hi,
Did you compile your program with the i686 compiler or the x86_64 compiler? I
suspect it has something to do with the
floating-point environment.
My windows is 64bit version widows 8.1.
So, I installed x86_64 package via msys2 pacman.
Would you please check the sum of
1.9999999999999998
and
1.1102230246251564e-16,
in both the main thread and an OMP thread?
IEEE-conforming double precision (with a 53-bit mantissa) arithmetic shall yield
1.9999999999999998,
while a defective implementation (for example, if your FORTRAN compiler
performs 64-bit addition with x87, rounds the result
accordingly, then double-rounds it to 53-bit precision), you may get 2.0 [1].
The mingw-w64 CRT initializes the x87 control word to 64-bit precision, in
contrast to MSVCRT which defaults to 53-bit
precision, and may produce unexpected results under rare circumstances.
[1] https://wandbox.org/permlink/v63VObkDke527VrJ
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public