Re: floating point inconsistency

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thank you for your reply, Neil.

Neil Ferguson <nferguso@xxxxxxx> writes:

> Christoph Groth wrote:
>
> <snipped inconsistent floating point results>
>
>> This is on a computer with an Intel Core 2 CPU (I tried several
>> different variants).
>>
>> If I take the second (-O1) binary and execute it on an Opteron it
>> produces the _first_ result.  Thus, the same static binary produces
>> different results on different processors!
>
> This is a hardware-related effect - in a nutshell, it happens because
> Intel hardware can extend double-precision floating point operations
> to 80 bits internally, whereas AMD hardware usually enforces 64 bits
> at all times.

I am aware of the x87 80/64-bit rounding issue and the related
inconsistencies (I stumbled across them myself in due time).  However,
here we're speaking of x86-64 CPUs on which gcc uses SSE for floating
point by default.  Indeed, explicitly switching on SSE does not change
anything:

cwg@argo:~$ g++ -O0 -static -mfpmath=sse test.cc
cwg@argo:~$ ./a.out
0.000880416620183556821 0.000603184177834822054
0.000880416620183556821
0
cwg@argo:~$ g++ -O1 -static -mfpmath=sse test.cc
cwg@argo:~$ ./a.out
0.00088041662018355693 0.000603184177834822054
0.000880416620183556821
1.08420217248550443e-19

I assumed that no such rounding issues are supposed to happen on x86-64.

And I could live with them, if there would be not the problem of the
same static binary producing different results on core2 and opteron.


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux