Andrea Mauri wrote on Wed, 30 Sep 2015:

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!

That is because 5.1 cannot be represented exactly using floating point. As a result, the compiler will parse it using the highest precision available, which is probably the 80 bit extended type on your target platform. Therefore, the second samevalue calls the extended precision version of that routine, while the first one calls the double precision version (since both arguments are double).

Depending on the value, the extended and double precision versions of samevalue can indeed have different results. That's also the reason for the outcome of your second test.


Jonas

PS: please don't cross-post to multiple lists.
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to