[Lazarus] samevalue function issue

Andrea Mauri andrea.mauri.75 at gmail.com
Wed Sep 30 13:06:56 CEST 2015


Dear all,

I am using samevalue function provided with fpc (math unit).
I am using samevalue instead of = in order to avoid problems related to 
precision.

If I compare two values:
   a:= 5.1000000000000005;
   b:= 5.1;
if I use = operator I get that the two numbers are different.
Using samevalue I should get that a and b are equal.

Anyway I am encountering an issue that I cannot understand, see the two 
code samples below:

var
a, b: Double;
begin
   a:= 5.1000000000000005;
   b:= 5.1;
   if samevalue(a, b) then              // I get TRUE - right!
     label1.Caption:= 'same value (variable): True'
   else
     label1.Caption:= 'same value (variable): False';
   if samevalue(a, 5.1) then             // I get FALSE -- I supposed to 
get TRUE- bad!
     label2.Caption:= 'same value (const): True'
   else
     label2.Caption:= 'same value (const): False';
end;

why two different behaviours if I use b as a variable or as a constant?

Inversely:

var
   a, b: Double;
begin
   a:= 43.999400000000009;
   b:= 44;
   if samevalue(a, b) then              // I get FALSE - right!
     label1.Caption:= 'same value (variable): True'
   else
     label1.Caption:= 'same value (variable): False';
   if samevalue(a, 44) then             // I get TRUE -- I supposed to 
get FALSE- bad!
     label2.Caption:= 'same value (const): True'
   else
     label2.Caption:= 'same value (const): False';
end;

It seems that samevalue works if I use samevalue(a, b) but not if I 
directly pass a number to samevalue as samevalue(a, 44). But I am not 
sure since I did only few tests.

Could you please provide some explanations? Why the two different 
behaviours? How should I use samevalue?

Let me know and best regards,
Andrea Mauri




More information about the Lazarus mailing list