[fpc-pascal] Order of Precedence: FPC/Delphi vs Java
Florian Klämpfl
florian at freepascal.org
Wed Oct 3 12:06:15 CEST 2018
Am 03.10.2018 um 11:28 schrieb mailinglists at geldenhuys.co.uk:
>
> graeme.geldenhuys at UKCM-L500737 C:\devel\tests\OperatorPrecedence
>> fpc -Criot TestOperatorPrecedence.pas
> Free Pascal Compiler version 3.0.2 [2017/02/13] for i386
> Copyright (c) 1993-2017 by Florian Klaempfl and others
> Target OS: Win32 for i386
> Compiling TestOperatorPrecedence.pas
> TestOperatorPrecedence.pas(10,3) Note: Local variable "a" is assigned but never used
> Linking TestOperatorPrecedence.exe
> 36 lines compiled, 0.1 sec, 35232 bytes code, 2436 bytes data
> 1 note(s) issued
>
> graeme.geldenhuys at UKCM-L500737 C:\devel\tests\OperatorPrecedence
>> TestOperatorPrecedence.exe
> 5.1009900000000001E+004
> 5.1009900000000001E+004
> 5.1009900000000001E+004
> ---
> -3.5527136788005009E-015
> -3.5527136788005009E-015
> -3.5527136788005009E-015
> 0.0000000000000000E+000
> 0.0000000000000000E+000
>
>
> Sorry, but this makes no sense to me.
In 32 Bit by default the x87 CPU is used. The x87 FPU uses extended for calculations and intermediate results (this is
basically a difference with respect to all other FPUs having any significance during the last >20 years) by default.
There are no instructions to force operations with single/double precisions, there is only a status which allows to
switch to another precision, see below.
b * c / d calculated with extended precision differs from the plain double value of c.
To get the same results with the x87 FPU, add
uses
math;
......
SetPrecisionMode(pmDouble);
to your program.
Or:
change all variables to extended, so the constants are really stored with extended precision representing exactly the
value 51009.9.
More information about the fpc-pascal
mailing list