Bug report: double floating point arithmetic errors under Linux

From: MARRE Bruno <Bruno.Marre_at_cea.fr>
Date: Tue 22 Oct 2002 08:09:12 AM GMT
Message-ID: <3DB507A8.8040200@cea.fr>
Dear Eclipse developpers,

I have noticed a different behaviours concerning double floats and
breals between Linux and solaris versions of Eclipse 5.4.

In both cases here is my Eclipse banner

ECLiPSe Constraint Logic Programming System [kernel]
Copyright Imperial College London and ICL
Certain libraries copyright Parc Technologies Ltd
GMP library copyright Free Software Foundation
Version 5.4 #27, Wed May 15 00:13 2002

For Solaris (Sparc SunOs5) the following queries and answers seem correct

[eclipse 1]: N is breal(0_1).

N = -4.94065645841247e-324__4.94065645841247e-324
Yes (0.00s cpu)
%% Here we see the value of Epsilon float

[eclipse 2]: N is breal(rational(16.0)),  %% Interval containing 16.0
	breal_max(N,SN),                  %% Successor float of 16.0
	Delta is (SN - 16.0)/2.0,         %% Righ error of 16.0
	Sixteen is 16.0 + Delta,          %% Are we still on 16.0 ?		
         BrDelta is breal(rational(Delta)),%% Interval enclosing Delta
	breal_max(BrDelta,SDelta),        %% Successor of Delta
	NotSixteen is 16.0 + SDelta.

N = 15.999999999999998__16.000000000000004
SN = 16.000000000000004
Sixteen = 16.0
Delta = 1.7763568394002505e-15
BrDelta = 1.7763568394002503e-15__1.7763568394002509e-15
NotSixteen = 16.000000000000004
SDelta = 1.7763568394002509e-15
Yes (0.00s cpu)

And we see that we go after 16.0 if we add it the successor of Delta.



For Linux (Mandrake distribution,PC P4 1400MHZ) The same queries do not 
return the same results (due to errors caused by GMP ?)
[eclipse 1]: N is breal(0_1).

N = -2.2250738585072014e-308__2.2250738585072014e-308
Yes (0.00s cpu)
%% We have not the same value for Epsilon float !

[eclipse 2]: N is breal(rational(16.0)),  %% Interval containing 16.0
	breal_max(N,SN),                  %% Successor float of 16.0
	Delta is (SN - 16.0)/2.0,         %% Righ error of 16.0
	Sixteen is 16.0 + Delta,          %% Are we still on 16.0 ?		
         BrDelta is breal(rational(Delta)),%% Interval enclosing Delta
	breal_max(BrDelta,SDelta),        %% Successor of Delta
	NotSixteen is 16.0 + SDelta.						

N = 15.999999999999998__16.000000000000004
SN = 16.000000000000004
Sixteen = 16.0
Delta = 1.7763568394002505e-15
BrDelta = 1.7763568394002503e-15__1.7763568394002509e-15
NotSixteen = 16.0
SDelta = 1.7763568394002509e-15
Yes (0.00s cpu)

And now we see that adding the successor of Delta to 16.0 still
returns 16.0, which is wrong (rounding error in GMP ?)


Is this bug wellknown ? Is there any way to solve it inside Eclipse 
V5.4, or is there any patch for it.
Will it be solved in next release (in november ?).

Best regards,

	Bruno Marre
Received on Tue Oct 22 09:09:38 2002

This archive was generated by hypermail 2.1.8 : Wed 16 Nov 2005 06:08:18 PM GMT GMT