Your code does not even compile on
my 2.6.4 installation (no Lazarus).
Where does the currtostr function come from?
Apparently from sysutils unit.
Yes from SysUtils
How is it 'included' without any uses clause?
I found no option that automatic
add unit sysutils.
Could you give us a source and a compilation command line
that does not require Lazarus use?
Source code attached.
Command line parameters: -MObjFPC -Scghi -O1 -Twin32 -Pi386 -g -gl
-vewnhi -Filib\i386-win32 -Fu. -FUlib\i386-win32 -l
(taken from Lazarus as I never have used only standalone compiler ,
without Lazarus IDE)
========= PROGRAM ==============
program test_Currency;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
SysUtils;
var
s: string;
c: currency;
e: extended;
d: double;
i64: int64;
begin
c:=-92233720368547;
d:=-92233720368547;
e:=c;
i64:=PInt64(@c)^;
writeln('CW=', Get8087cw());
writeln('currency=', c);
writeln('extended=', e);
writeln('string=', currtostr(c));
writeln('int64=', i64);
writeln('double=', d);
readln;
end.
================================
When I compile on Win98 and run (it does not depend if it is ran on
Win98 or XP or Vista) output is same:
=========== OUTPUT 1 ===========
CW=4978
currency=-9.223372036854699520E+13
extended=-9.2233720368546995E+0013
string=-92233720368546,9952
int64=-922337203685469952
double=-9.22337203685470E+013
================================
It seems (based on "i64" variable), that currency "c" is wrong
initialised with "-92233720368546.9952"
On other side double is correct "-92233720368547"
When I compile on Win Vista and run (it does not depend if it is Win98
or XP or Vista) output is correct (as expected):
=========== OUTPUT 2 ============
CW=4978
currency=-9.223372036854700000E+13
extended=-9.2233720368547000E+0013
string=-92233720368547
int64=-922337203685470000
double=-9.22337203685470E+013
================================
Thanks
-Laco.
Pierre Muller
-----Message d'origine-----
De : fpc-pascal-boun...@lists.freepascal.org [mailto:fpc-pascal-
boun...@lists.freepascal.org] De la part de LacaK
Envoyé : mardi 29 avril 2014 10:23
À : FPC-Pascal users discussions
Objet : [fpc-pascal] Inconsistent results currency - extended ?
Hi,
I catch strange behavior, which I can not understand ;-)
I have 2 PC on both I have installed Lazarus 1.2.2 + FPC 2.6.4
(official
release)
1st PC has Windows 98 2nd PC has Windows Vista (32 bit)
I have this program:
=============================
var
c: currency;
e: extended;
begin
c:=-92233720368547;
e:=c;
writeln('CW=', Get8087cw(), ' currency=', c, ' extended=', e, '
string=', currtostr(c));
=============================
When I compile on 1st PC (Win98) and run it on 1st or 2nd PC I get this
result:
CW=4978 currency=-9.223372036854699520E+13
extended=-9.2233720368546995E+0013 string=-92233720368546,9952
When I compile on 2nd PC (Win Vista) and run on 1st or 2nd PC I get
(expected) result:
CW=4978 currency=-9.223372036854700000E+13
extended=-9.2233720368547000E+0013 string=-92233720368547
How is it possible?
Is compiled code somehow affected by platform on which is compilation
performed?
Thanks
-Laco.
_______________________________________________
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
program test_Currency;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
SysUtils;
var
s: string;
c: currency;
e: extended;
d: double;
i64: int64;
begin
c:=currency(-92233720368547);
d:=-922337203685470000;
e:=c;
i64:=PInt64(@c)^;
writeln('CW=', Get8087cw());
writeln('currency=', c);
writeln('extended=', e);
writeln('string=', currtostr(c));
writeln('int64=', i64);
writeln('double=', d);
readln;
end.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal