Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2022-11

Strange floating-point result

3 messages · 2 people ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Thomas Kurz

Hello,

by chance, I stumbled upon a strange behavior in floating-point calculation. Here's the example:

program Project1;
var
  f: double;
  n: integer = 1758;
  m: integer = 0;
begin
  f := n * 1.2E6 + (2*m+1) * 50E3; // 2109650048
  f := Double(n) * 1.2E6 + Double(2*m+1) * 50E3; // 2109650000
end.

Why do I have to explicitly cast Integer to Double here? I never did that before and am a bit worried whether I could get wrong results elsewhere, too, without having them noticed yet. And how does the first value come about?

FPC is 3.2.2 on Win64, targeting Win64.

Kind regards,
Thomas

Reply by email

Jonas Maebe
to Thomas Kurz
Thomas Kurz wrote
Why do I have to explicitly cast Integer to Double here?

Because 1.2E6 can be represented exactly by single precision.

You can use -CF64 to force floating point constants to have at least 64 bits precision. Or you can use {$excessprecision on} to force the compiler to evaluate all floating point expressions always using the maximum precision supported by the FPU.

Jonas

Reply by email