[Back to MATH SWAG index]  [Back to Main SWAG index]  [Original]

{
  Hi, to All:

   ...While recently "tuning up" one of my Programs I'm currently
   working on, I ran a little test to Compare the perfomance
   of the different versions of Turbo Pascal from 5.0 through
   to 7.0. The results were quite suprizing, and I thought I'd
   share this With you guys/gals.

   Here are the results of a "sieve" Program to find all the primes
   in 1 - 100,000, running on my AMI 386SX-25 CPU desktop PC:

      CompILER    EXECUTION TIME    RELATIVE TIME FACtoR
      ==================================================
       TP 7.0        46.7 sec              1.00
       TP 6.0       137.8 sec              2.95
       TP 5.5       137.5 sec              2.94
       TP 5.0       137.6 sec              2.95

   Running the same Program to find all the primes in 1 - 10,000,
   running on my 8086 - 9.54 Mhz NEC V20 CPU laptop PC:

      CompILER    EXECUTION TIME    RELATIVE TIME FACtoR
      ==================================================
       TP 7.0        14.1 sec              1.00
       TP 6.0        28.3 sec              2.00

  notE: This would seem to indicate that the TP 7.0 386 math-
        library is kicking in when run on a 386 CPU.

  Here is the source-code to my "seive" Program:
------------------------------------------------------------------------
}
 {.$DEFinE DebugMode}
 {$DEFinE SaveData}

 {$ifDEF DebugMode}
   {$ifDEF VER70}
     {$ifDEF DPMI}
       {$A+,B-,D+,E-,F-,G-,I+,L+,N-,P+,Q+,R+,S+,T+,V+,X-}
     {$else}
       {$A+,B-,D+,E-,F-,G-,I+,L+,N-,O-,P+,Q+,R+,S+,T+,V+,X-}
     {$endif}
   {$else}
     {$ifDEF VER60}
       {$A+,B-,D+,E-,F-,G-,I+,L+,N-,O-,R+,S+,V+,X-}
     {$else}
       {$A+,B-,D+,E-,F-,I+,L+,N-,O-,R+,S+,V+}
     {$endif}
   {$endif}
 {$else}
   {$ifDEF VER70}
     {$ifDEF DPMI}
       {$A+,B-,D-,E-,F-,G-,I-,L-,N-,P-,Q-,R-,S+,T-,V-,X-}
     {$else}
       {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S+,T-,V-,X-}
     {$endif}
   {$else}
     {$ifDEF VER60}
       {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S+,V-,X-}
     {$else}
       {$A+,B-,D-,E-,F-,I-,L-,N-,O-,R-,S+,V-}
     {$endif}
   {$endif}
 {$endif}

              (* Find prime numbers - Guy McLoughlin, 1993.           *)
Program Find_Primes;

  (***** Check if a number is prime.                                  *)
  (*                                                                  *)
  Function Prime({input } lo_in : LongInt) : {output} Boolean;
  Var
    lo_Stop,
    lo_Loop : LongInt;
  begin
    if (lo_in mod 2 = 0) then
      begin
        Prime := (lo_in = 2);
        Exit
      end;
    if (lo_in mod 3 = 0) then
      begin
        Prime := (lo_in = 3);
        Exit
      end;

    if (lo_in mod 5 = 0) then
      begin
        Prime := (lo_in = 5);
        Exit
      end;
    lo_Stop := 7;
    While ((lo_Stop * lo_Stop) <= lo_in) do
      inc(lo_Stop, 2);
    lo_Loop := 7;
    While (lo_Loop < lo_Stop) do
      begin
        inc(lo_Loop, 2);
        if (lo_in mod lo_Loop = 0) then
          begin
            Prime := False;
            Exit
          end
      end;
    Prime := True
  end;        (* Prime.                                               *)

  (***** Check For File IO errors.                                    *)
  (*                                                                  *)
  Procedure CheckIOerror;
  Var
    by_Error : Byte;
  begin
    by_Error := ioresult;
    if (by_Error <> 0) then
      begin
        Writeln('File Error = ', by_Error);
        halt
      end
  end;        (* CheckIOerror.                                        *)

Var
  bo_Temp       : Boolean;
  wo_PrimeCount : Word;
  lo_Temp,
  lo_Loop       : LongInt;
  fite_Data     : Text;

begin
  lo_Temp := 100000;
  {$ifDEF SaveData}
    {$ifDEF VER50}
      assign(fite_Data, 'PRIME.50');
    {$endif}
    {$ifDEF VER55}
      assign(fite_Data, 'PRIME.55');
    {$endif}
    {$ifDEF VER60}
      assign(fite_Data, 'PRIME.60');
    {$endif}
    {$ifDEF VER70}
      assign(fite_Data, 'PRIME.70');
    {$endif}
    {$I-}
    reWrite(fite_Data);
    {$I+}
    CheckIOerror;
    {$endif}
  wo_PrimeCount := 0;
  For lo_Loop := 2 to lo_Temp do
    if Prime(lo_Loop) then
  {$ifDEF SaveData}
      begin
        Write(fite_Data, lo_Loop:6);
        Write(fite_Data, ', ');
        inc(wo_PrimeCount);
        if ((wo_PrimeCount mod 10) = 0) then
          Writeln(fite_Data)
      end;
    close(fite_Data);
    CheckIOerror;
  {$else}
      inc(wo_PrimeCount);
  {$endif}
    Writeln(wo_PrimeCount, ' primes between: 1 - ', lo_Temp)
end.

{
   ...This little test would put TP 7.0's .EXE's between 2 to 3
   times faster than TP4 - TP6 .EXE's. (I've found simmilar results
   in testing other Programs I've written.) I guess this is one more
   reason to upgrade to TP 7.0 .

   ...I'd be curious to see how StonyBrook's Pascal+ 6.1 Compares
   to TP 7.0, in terms of execution speed With this Program.

                               - Guy
}

[Back to MATH SWAG index]  [Back to Main SWAG index]  [Original]