Lacak :
1 - XP difference between 2.6.4 and 2.7.1 on same machine
writeln('extended=', e);
extended=-9.22337203685477580811E+0014 <== HERE
calls str_real in real2str.inc that is in the course of beeing modified
in 2.7.1. If your compare the source code, you will see it has changed and is
in fact work in progress, at least in my OLD downloaded version of FPC2.7.1.
If it is still like that with the latest developpment 2.7.1, maybe some
knowlegable developper should have a look at it.
2 - Difference between 2.6.4 on Win98 and WinXP.
I suspect that these 2 are on different computers and thus do not have
exactly the same floating point unit. Line
e:=c; uses the FPU to convert from Currency to Extended. Schematically,
Extended stores values Sign*2^exponent*Mantissa. (See
http://en.wikipedia.org/wiki/Extended_precision for more info) That means, for
example, that 0.1 cannot be EXACTLY stored in an Extended thus, depending on
the FPU, they might be converted to a slightly different representation.
2b - Quote : It seems, that FPC on Win98 incorrectly stores currency constant.
No. And the proof is that :
writeln('currency=', c);
writeln('string=', currtostr(c));
do actualy writeln the correct result. Both use at some point currtostr(c).
What currtostr(c) does is expand the Int64(c) to a decimal string and then
insert the point in the position(length-4).
As long as there are no divisions and no Overflow, Currency will give correct
and exact decimal results in all +, -,* computations, it is a simple Int64 that
is converted (see 2b) to a decimal representation when displayed. I have used
Currency in Quick Basic Compiler in the old days, then in Delphi applications
for accounting purposes (with some customized roundings / convertions to Float
when needed) and never had complaints from users.
Regards, Bruno
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal