Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.218.129.100] |
|
Сообщ.
#1
,
|
|
|
языка Паскаль:
Время в секундах. Замечания и предложения принимаются. Операция 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 Программка тут: 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. |
Сообщ.
#2
,
|
|
|
Сравнение конструкций циклов
Конструкции циклов 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 Программа: 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. |
Сообщ.
#3
,
|
|
|
TMT рулит!
Проверь еще скоростьобращения к процедурам, если не трудно. |
Сообщ.
#4
,
|
|
|
Это всё зависит от того, работают программы в реальном (или виртуальном) или защищённом режиме; от того, используют ли они со-процессор или нет; ну и, конечно, от корявости
2 Автор: Пришли-ка мне exe-шники программы, откомпиленой на разных паскалях (желательно под DOS, DOS/DPMI и Windows). Можно также и с разными ключами для работы с числами (проверки там и т.д). Только не забудь обозначить какая программа чем и с какими ключами компилилась Вот программа: 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 |
Сообщ.
#5
,
|
|
|
Цитата Jin X, 13.03.03, 18:19:05 Это всё зависит от того, работают программы в реальном (или виртуальном) или защищённом режиме; от того, используют ли они со-процессор или нет; ну и, конечно, от корявости Все программы компилировались строчником для защищенного режима MSDOS, с установками компилятора по умолчанию, и выполнялись в режиме MSDOS bp с ключом N+ vp21, fpc, тмт у них сопр включен по дефолту Цитата 2 Автор: Пришли-ка мне exe-шники программы, откомпиленой на разных паскалях (желательно под DOS, DOS/DPMI и Windows). Ok |
Сообщ.
#6
,
|
|
|
А все-таки, как насчет проверки вызовов процедур и функций?
|