Am 08.06.2018 um 14:47 schrieb Klaus Hartnegg:
Hi,
The round function behaves different than in TurboPascal, and its
English Wiki page differs from the German page.
When given an argument halfway between to integers, FreePascal rounds
to the nearest even number, TurboPascal always rounds up (except when
it is set to mode $N+, but default is $N-).
The German Wiki pages for Round and SetSoundMode (URLs below) contain
a warning to not use SetRoundMode, because that also affects internal
calculations, and how numbers are stored in variables when they do not
fit with full precision.
How serious is this issue compared with using a different rounding
method?
The german pages suggest to use this function instead:
function round(x: Float): Integer; { requires unit math for 'float' }
begin
if x > 0 then
round := trunc(x + 0.5)
else
round := -trunc(-x + 0.5);
end;
That is fine, except that I will likely forget it in some unit, and
manually inspecting all units is less reliable than when the compiler
ensures it.
This is not sufficient, IMO, when using float,
look here:
http://bernd-oppolzer.de/job9i032.htm
In Turbo-Pascal the browsing feature (search,symbol) of the IDE can
show a list of all places where system.round gets called. The
FreePascal IDE does not show that list (see my other email).
Is there some other reliable(!) way to fix or check this? Maybe a map
file with all functions that got linked into the executable?
The Wiki pages are
- wiki.freepascal.org/Round
- wiki.freepascal.org/Round/de
- wiki.freepascal.org/SetRoundMode
- wiki.freepascal.org/SetRoundMode/de
If the warning is correct, there should also be a note on
https://www.freepascal.org/docs-html/rtl/math/setroundmode.html
thanks,
Klaus
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal