[fpc-pascal]Bug or not Bug

Vincent Snijders vslist at zonnet.nl
Thu Mar 11 12:55:14 CET 2004


On Thu, 11 Mar 2004 12:32:24 +0200
"Andrew J.Swan \[home\]" <ajs at ukrpost.net> 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. 




More information about the fpc-pascal mailing list