floating point inconsistency

Christoph Groth cwg@falma.de
Tue Feb 16 10:18:00 GMT 2010


Thank you for your reply, Tim.

Tim Prince <n8tm@aol.com> writes:

> On 2/15/2010 5:23 PM, Neil Ferguson wrote:
>> 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.
>>
> OP didn't indicate that -mfpmath=387 was used for the Intel run,
> vs. -mfpmath=sse for the AMD one.  It has to be guessed that the
> rounding mode was set differently, or (if a 387 build) precision mode
> was set differently, or (if an sse build) gradual underflow was set
> differently.  Both of you are too quick to blame gcc or Intel or AMD
> for something which almost certainly stems from other influences.

It was an sse build (default on core2).  How to set "gradual underflow"
consistently?  -frounding-math does not help.

Should the same binary not produce the same output on a processor with
the same instruction set, no matter what the compiling options were?



More information about the Gcc-help mailing list