[fpc-pascal] Floating point discrepancy in x64 mode
OBones
obones at free.fr
Fri Jul 20 11:59:53 CEST 2012
Hello all,
Let's consider the following test program:
program test;
function DirectCompute: Double;
var
k: Integer;
begin
k := 0;
Result := (k+0.5)/12;
end;
function IntermediateCompute: Double;
var
k: Integer;
begin
k := 0;
Result := k+0.5;
Result := Result / 12;
end;
begin
WriteLn(DirectCompute);
WriteLn(IntermediateCompute);
end.
When I compile it with ppc386 and run it, I get the following output:
4.16666666666667E-002
4.16666666666667E-002
which is totally expected.
However, when I compile it with ppcrossx64 and run it, I get the
following output:
4.16666679084301E-002
4.16666666666667E-002
The error is very significant here as in my real world program, it gets
propagated through successive multiplications.
Looking at the bit values, I get this:
$3FA5555560000000 for the "bogus value"
$3FA5555555555555 for the expected value
I tried setting the optimization options ( O-, O1, O2, O3) but to no avail.
All this is with FPC 2.6.0 (2011/12/25) as it is the latest stable release.
Many thanks in advance for your help
More information about the fpc-pascal
mailing list