Hint:
Looking at the generated assembler code it seems, that:
On 32Bit Linux the Floating Point unit will be used.
On 64Bit Linux the SSE2 Unit will be used.
Since I am not an assembler programer this may be a missinterpretation.
Floating point math is not what you intuitively expect it to be. The machine can store only discrete values, so there is a lot of rounding, and different systems use different precision. Do not expect the 0.3, 1.0 and 1.3 be exactly those values.
Temporary values may be pushed to memory, or kept in register that might store more digits.