On Thu, 11 Mar 2004 12:32:24 +0200
"Andrew J.Swan \[home\]" <[EMAIL PROTECTED]> wrote:

> * Hi Fpc-list,
> 
> I'm having trouble using Round:
> ----- [ BOF: test.pas  ] -----
> Program Test ;
> Uses
>   Math, SysUtils ;
> 
> Var
>   i : Byte ;
> Begin
>   For i := 0 to 31 do
>     WriteLn(Format('%d %.8x',[i,Round(Ldexp(1,i))])) ;
> End.
> ----- [ EOF: test.pas  ] -----
> 
> ,----- [ FPC: ]
> | 0 00000001
> | [...]
> | 30 40000000
> | An unhandled exception occurred at 0x004109D1 :
> | EINVALIDOP : Invalid floating point operation
> |   0x004109D1
> |   0x0006FF78
> |   0x8D000CC2
> `-----
> ,----- [ Delphi: ]
> | 0 00000001
> | [...]
> | 30 40000000
> | 31 80000000
> `-----
> 
> Any idea ?

Round returns a longint. The range of a longint is -2^31 .. (2^31-1).
The result you had (2^31) doesn't fit in a longint, so this is not a fpc bug.

As I don't have Delphi, I don't know why Delphi doesn't give an error. It could
be that the Delphi's return value is int64 or cardinal. Or it simply doesn't
care about the overflow. What happens in delphi if the formatstring is '%d %d'?

HTH,
Vincent. 

_______________________________________________
fpc-pascal maillist  -  [EMAIL PROTECTED]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to