On 02 Dec 2009, at 16:19, Dariusz Mazur wrote:
Jonas Maebe pisze:
On 02 Dec 2009, at 00:15, Dariusz Mazur wrote:
Jonas Maebe pisze:
or compiler can use comp internal as int64 and external as real.
That would result in precision loss.
Why. comp is 8 byte wide, the same as int64,
The precision loss occurs when treating it "external as real", because
a double cannot represent all int64 values (it's also 8 bytes, but
some of those 8 bytes are used to represent an exponent).
As I read Delphi help now, comp is internal Intel int64, but is
classified as real, because it is not ordinal type.
The reason is because x87 fpu supports a signed 64 bit integer type
(which Borland called "comp"). They introduced that type to allow
people to perform fairly quick 64 bit arithmetic mathematics on the
old Intel 16 bit processors, by making use of the floating point unit.
That's the reason for the strange the definition and the non-
portability.
on linux-arm the same switch cause compiling error (problems with
units generating with different switch ) remark: all compiled with
-CfSOFT
Compiling with -Cfsoft and {$E-} will indeed probably causes
errors. The compiler should simply give an error when you try to do
that.
Not simpler ignore this?
It may seem simpler at first sight, but putting "intelligence" like
that in the compiler only makes the compiler's behaviour more complex
to understand in the long run (if the compiler ignores what I'm doing
here, under what other circumstances will it ignore things?) and more
difficult to maintain.
On other platforms this is not enough, and more switches should be
added
I don't understand what you mean with this. Note that we do not
support floating point emulation on all platforms.
Jonas
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel