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

Reply via email to