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.