opensubscriber
   Find in this group all groups
 
Unknown more information…

f : fpc-pascal@lists.freepascal.org 20 July 2012 • 5:59PM -0400

[fpc-pascal] Floating point discrepancy in x64 mode
by OBones

REPLY TO AUTHOR
 
REPLY TO GROUP




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


_______________________________________________
fpc-pascal maillist  -  fpc-pascal@list...
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

Related Messages

opensubscriber is not affiliated with the authors of this message nor responsible for its content.