На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Сравнение быстродействия различных компи
    языка Паскаль:
    Время в секундах.
    Замечания и предложения принимаются.

    ExpandedWrap disabled
      Операция                 BP 7.1 TMT P. 3.9 Free Pascal     VP 1.2
      REAL+REAL (var)             2,97      0,22      0,17      2,09
      REAL+REAL (const)           0,11      0,22      0,11       1,4
      REAL*REAL                   2,69      0,38      0,22       2,3
      REAL*INTEGER                1,87      0,28      0,22      1,37
      COS(INTEGER)               17,96      2,36      1,48      2,37
      COS(REAL)                  16,64      2,19      0,11      2,41
      LN(INTEGER)                14,28      3,14      2,42      2,53
      LN(REAL)                   15,44       3,2      0,11      2,53
      SQR(INTEGER)                1,53      0,27      0,38      0,77
      SQR(IREAL)                  1,38      0,33      0,11      0,82
      SQRT(INTEGER)               2,19      1,54      0,77      1,21
      SQRT(IREAL)                  2,4      1,98      0,11      1,26


    Программка тут:
    ExpandedWrap disabled
      Uses Dos,Crt;
      const
        xrc1=42342345.342345234;
        xrc2=8934083456.234823;
      var
        xr1,xr2,xr3:real;
        hl1, ml1, sl1, hund  : Word;
        hl2, ml2, sl2, hund1 : Word;
        rh,rm,rs,rt          : Word;
        xi1,i:LongInt;
       
       
      Procedure TMinusT1 (var h,m,s,t:Word;var h1,m1,s1,t1:Word;
                          var rh,rm,rs,rt:Word);
      begin
        t1:=t1+100-t;
        s1:=s1+59-s;
        m1:=m1+59-m;
        h1:=h1+23-h;
        if t1>=100 then
          begin
            rt:=t1-100;
            s1:=s1+1
          end
        else
          rt:=t1;
        if s1>=60 then
          begin
            rs:=s1-60;
            m1:=m1+1
          end
        else
          rs:=s1;
        if m1>=60 then
          begin
            rm:=m1-60;
            h1:=h1+1
          end
        else
          rm:=m1;
        if h1>=24 then
          rh:=h1-24
        else
          rh:=h1;
        WriteLn('’Ґбв Їа®©¤Ґ­ §  ',rh,' з б®ў, ',rm,' ¬Ё­гв, ',rs,' ᥪ㭤, ',rt,' б®вле ᥪ㭤л.');
      end;
       
      begin
        ClrScr;
        xr1:=xrc1;
        xr2:=xrc2;
        xi1:=987654321;
        {*******************************}
        WriteLn('Real + Real (Var)');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=xr1+xr2;
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
        {*******************************}
        WriteLn('Real + Real (Const)');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=xrc1+xrc2;
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
        {*******************************}
        WriteLn('Real * Real');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=xr1*xr2;
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
        {*******************************}
        WriteLn('Real * Integer');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=xr1*xi1;
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
        {*******************************}
        WriteLn('Cos(Integer)');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=COS(xi1);
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
        {*******************************}
        WriteLn('Cos(Real)');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=COS(xrc1);
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
        {*******************************}
        WriteLn('Ln(Integer)');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=LN(xi1);
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
        {*******************************}
        WriteLn('Ln(Real)');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=LN(xrc1);
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
        {*******************************}
        WriteLn('SQR(Integer)');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=SQR(xi1);
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
        {*******************************}
        WriteLn('SQR(Real)');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=SQR(xrc1);
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
        {*******************************}
        WriteLn('SQRT(Integer)');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=SQRT(xi1);
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
        {*******************************}
        WriteLn('SQRT(Real)');
        GetTime(hl1,ml1,sl1,hund);
        for i:=1 to 5000000 do
          xr3:=SQRT(xrc1);
        GetTime(hl2,ml2,sl2,hund1);
        TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
       
        ReadKey;
      end.
      Сравнение конструкций циклов
      ExpandedWrap disabled
          Конструкции циклов    BP 7.1  TMT P. 3.9FPC 1.0.6   VP 1.2
        For                         0,71      0,38      0,49      0,44
        While                       0,93      0,55      0,55      0,55
        Repeat                      0,88       0,5      0,77      0,44


      Программа:
      ExpandedWrap disabled
        Uses Dos,Crt;
        var
          hl1, ml1, sl1, hund  : Word;
          hl2, ml2, sl2, hund1 : Word;
          rh,rm,rs,rt          : Word;
          i:LongInt;
         
         
        Procedure TMinusT1 (var h,m,s,t:Word;var h1,m1,s1,t1:Word;
                            var rh,rm,rs,rt:Word);
        begin
          t1:=t1+100-t;
          s1:=s1+59-s;
          m1:=m1+59-m;
          h1:=h1+23-h;
          if t1>=100 then
            begin
              rt:=t1-100;
              s1:=s1+1
            end
          else
            rt:=t1;
          if s1>=60 then
            begin
              rs:=s1-60;
              m1:=m1+1
            end
          else
            rs:=s1;
          if m1>=60 then
            begin
              rm:=m1-60;
              h1:=h1+1
            end
          else
            rm:=m1;
          if h1>=24 then
            rh:=h1-24
          else
            rh:=h1;
          WriteLn('Тест пройден за ',rh,' часов, ',rm,' минут, ',rs,' секунд, ',rt,' сотых секунды.');
        end;
         
        begin
          ClrScr;
          {*******************************}
          WriteLn('For ');
          GetTime(hl1,ml1,sl1,hund);
          for i:=1 to 50000000 do;
          GetTime(hl2,ml2,sl2,hund1);
          TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
          {*******************************}
          WriteLn('While');
          GetTime(hl1,ml1,sl1,hund);
          i:=1;
          while i<=50000000 do
            inc(i);
          GetTime(hl2,ml2,sl2,hund1);
          TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
          {*******************************}
          WriteLn('Repeat ... Until');
          GetTime(hl1,ml1,sl1,hund);
          i:=1;
          repeat
            inc(i);
          until i>50000000;
          GetTime(hl2,ml2,sl2,hund1);
          TMinusT1 (hl1,ml1,sl1,hund,hl2,ml2,sl2,hund1,rh,rm,rs,rt);
          ReadKey;
        end.
        TMT рулит!
        Проверь еще скоростьобращения к процедурам, если не трудно.
          Это всё зависит от того, работают программы в реальном (или виртуальном) или защищённом режиме; от того, используют ли они со-процессор или нет; ну и, конечно, от корявости :)

          2 Автор: Пришли-ка мне exe-шники программы, откомпиленой на разных паскалях (желательно под DOS, DOS/DPMI и Windows). Можно также и с разными ключами для работы с числами (проверки там и т.д). Только не забудь обозначить какая программа чем и с какими ключами компилилась :)
          Вот программа:
          ExpandedWrap disabled
            Var
               R1, R2: Real;
               E1, E2: Extended;
               S1, S2: String;
               i, j: Word;
             
            Begin
                Asm nop;nop;nop;nop End;
               R1 := 1000;
               R2 := 20;
                Asm nop;nop End;
               R1 := R1+R2;
                Asm nop;nop End;
               R1 := R1/R2;
                Asm nop;nop End;
               R1 := R1*R2;
                Asm nop;nop End;
               R1 := Sin(R2);
                Asm nop;nop;nop End;
               E1 := 1000;
               E2 := 20;
                Asm nop;nop End;
               E1 := E1+E2;
                Asm nop;nop End;
               E1 := E1/E2;
                Asm nop;nop End;
               E1 := E1*E2;
                Asm nop;nop End;
               E1 := Sin(E2);
                Asm nop;nop;nop End;
               For i := 1 to 10 do Inc(j);
                Asm nop;nop End;
               While i > 0 do Dec(i);
                Asm nop;nop End;
               Repeat
                  Dec(j)
               Until j = 0;
                Asm nop;nop;nop End;
               S1 := '123';
                Asm nop;nop End;
               S2 := '890';
                Asm nop;nop End;
               S1 := S1+'5';
                Asm nop;nop End;
               S1 := S1+'67';
                Asm nop;nop End;
               S1 := S1+S2;
                Asm nop;nop;nop;nop End
            End.

          Хоцца поанализировать получаемый код :)
          jin_x@pisem.net
            Цитата Jin X, 13.03.03, 18:19:05
            Это всё зависит от того, работают программы в реальном (или виртуальном) или защищённом режиме; от того, используют ли они со-процессор или нет; ну и, конечно, от корявости :)

            Все программы компилировались строчником для защищенного режима MSDOS, с установками компилятора по умолчанию, и выполнялись в режиме MSDOS
            bp с ключом N+
            vp21, fpc, тмт  у них сопр включен по дефолту
            Цитата

            2 Автор: Пришли-ка мне exe-шники программы, откомпиленой на разных паскалях (желательно под DOS, DOS/DPMI и Windows).

            Ok
              А все-таки, как насчет проверки вызовов процедур и функций?
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0313 ]   [ 15 queries used ]   [ Generated: 26.04.24, 10:41 GMT ]