[fpc-pascal] Happy tickets benchmark

Jonas Maebe jonas.maebe at elis.ugent.be
Thu Mar 3 10:59:12 CET 2016


Serguei TARASSOV wrote on Thu, 03 Mar 2016:

> Jeppe Johansen-3 wrote
>>>
>> The Integer type depends on what compiler mode you are in, and what
>> operating system. Sometimes it's 32bit and other times it's 16bit.

AFAIK it only depends on the compiler mode.

> It was FPC 2.6.4 64 bits in FPC mode on Linux. See the sources to reproduce.
> Change:
> TicketsCount: longint;
> to
> TicketsCount: integer;
>
> Compile: fpc -O2 -Cr- HappyTickets.pas
>
> Result: Found 31902 tickets. Elapsed time, msec: 203
>
> I don't see any reason to use 16-bits integer in this code much less in
> 64-bits mode.

The reason is, as always, compatibility. FPC mode started as an  
extension of the Turbo Pascal compatibility mode. In Turbo Pascal,  
integer is 16 bits. In Delphi, it's 32 bits, so both in Delphi and in  
ObjFPC modes, integer is 32 bits. Code that was written with integer =  
16 bits may no longer work the same if the size of the integer type is  
changed to 32 bits (especially if overflow checking is off).

> I don't test it yet in FPC 3.0 bit 3.0 has other problems with my test:
> - changing the type of n1-n8 from 0..9 to longint increases the time by 10%
> - changing the type of n1-n8 from 0..9 to integer doubles the time!
>
> On the contrary, in Delphi 10 changing the type of n1-n8 from 0..9 to
> integer decreases the time by 60%

If you want to compare with Delphi, it's better to compile the program  
in Delphi mode. You should see the same 10% increase in FPC that you  
see when you change it to longint.


Jonas



More information about the fpc-pascal mailing list