[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