fpc/tests/webtbs/tw2129b.pp
Jonas Maebe 21eeec9981 + re-implementation of real->string and string->real conversion routines
based on the Grisu1 algorithm. This corrects several precision issues
    with the previous code used to perform such conversions (patch by
    Max Nazhalov, mantis #25241)
   o adaptation of several tests to deal with the better precision of these
     routines compared to the previous version
  Please don't remove the real2str.inc file yet, it's still used by the
  JVM target for now

git-svn-id: trunk@25888 -
2013-10-31 12:39:27 +00:00

43 lines
1.1 KiB
ObjectPascal

{ %version=1.1 }
{ Source provided for Free Pascal Bug Report 2129 }
{ Submitted by "Bill Rayer" on 2002-09-18 }
{ e-mail: lingolanguage@hotmail.com }
(*
Comp() cast has different effect in FPC.
Compiles using Delphi4:
dcc32 -CC fpc19
Compiles in FPC 1.0.6:
ppc386 -WC fpc19
When run, the Delphi version shows -6.5E+18, but the FPC version
shows zero. In Delphi, the comp() cast actually moves 8 bytes from
the double into the comp without converting the data, but FPC uses
floating point instructions to convert the data and therefore prints
zero.
In Delphi, if you want to convert a double to a float, you just use
the assignment "comp1 := dbl1" which corresponds to the FLD/FIST
opcodes. FPC should not use the comp() cast for doing this, since
it introduces a subtle incompatibility with Delphi.
*)
program fpc19;
{ the same as tw2129.pp for cpu's were comp = int64 }
var
comp1 : comp;
dbl1 : double;
s : string;
begin
{$ifdef cpui386}
dbl1 := -1e-128;
comp1 := comp(dbl1);
str(comp1:23,s);
if s<>' 0.00000000000000E+0000' then
begin
writeln('error: ',s);
halt(1);
end;
{$endif cpui386}
end.