Op 2019-05-25 om 14:54 schreef Ewald:
I am writing to you concerning an issue that I consider as being of the
greatest importance since it affects two compiler modes of the Free
Pascal Compiler. The round function in FPC (version 3.0.4) when the
parameter is equidistant from the two nearest integers (.5) rounds the
number towards the even number. This feature of the FPC's round transfer
function when it comes to rounding (.5) integers hinders both compliance
with the ISO 7185 standard and compatibility with Turbo Pascal.
What you are seeing is the so-called bankers rounding, where a halfway
fraction is indeed rounded toward the even number.
I was going to answer: "Use SetRoundingMode", but then I remembered that
there was a thread on this list about rounding modes quite some time ago
(2013), it was called "math round vs banker's round".
One of the replies of that thread, given By Sevn Barth was:
"Just checked again, most FPUs only seem to support "banker's rounding",
"round up", "round down" and "truncate", so these four are the only ones
supported by FPC's and Delphi's rounding mechanism. So if you want
normal mathematical rounding then you'll need to write your own function."
Since you state that there is an ISO standard that demands regular
rounding (not bankers rounding), and FPC has an ISO mode, I would
suggest you file a bug on this for the ISO-compliant mode.
Moreover, his example in the bugreport rounds literals which are rounded
compiletime irrespective of setroundingmode status in the compiler program.
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel