Лабы по МПО / Lap_2 / Lap_2
.doc
Обработка программ prost0.pas, prost0.c.
Turbo Profiler Version 2.1 Mon Mar 15 22:50:07 2004
Program: G:\UNIVER~1\86DED~1\0423~1\LAB_2\LAB2_1\ST_TPROF\BIN\PROST0.EXE File \
Time Counts
program prost;
{ Программа генерации простых чисел при помощи алгоритма Эвклида }
const maxprime=1000;
type
intarr=array[0..maxprime] of integer;
var
primes: intarr;
j,lastprime, curprime: integer;
0.0004 1 begin
0.0000 1 primes[0] := 2;
0.0000 1 primes[1] := 3;
0.0000 1 lastprime := 1;
0.0000 1 curprime := 3;
0.0000 1 writeln('prime0 = ', primes[0]);
0.0000 1 writeln('prime1 = ', primes[1]);
0.0004 499 while(curprime < MAXPRIME) do
begin
0.0004 498 for j := 0 to lastprime do
0.2332 15120 if((curprime mod primes[j]) = 0)
then begin
0.0002 333 curprime := curprime +2;
0.0003 333 break;
0.2331 14787 end;
0.0004 498 if((j+1) <= lastprime) then continue;
0.0001 166 lastprime:= lastprime+1;
0.0065 166 writeln('prime ', lastprime,'=', curprime);
0.0001 166 primes[lastprime] := curprime;
0.0001 166 curprime := curprime +2;
0.0001 166 end
0.0004 1 end.
Результаты профилирования по времени prost. pas
Execution Profile
Total time: 0.4763 sec
% of total: 100%
Run: 1 of 1
Display: Time
Filter: All
Sort: Frequency
PROST.20 0.2332 sec 48% | ===========================================
PROST.24 0.2331 sec 48% |==========================================
PROST.27 0.0065 sec 1% |=
PROST.9 0.0004 sec <1% |
PROST.17 0.0004 sec <1% |
PROST.19 0.0004 sec <1% |
PROST.25 0.0004 sec <1% |
PROST.31 0.0004 sec <1% |
PROST.23 0.0003 sec <1% |
PROST.22 0.0002 sec <1% |
PROST.26 0.0001 sec <1% |
PROST.30 0.0001 sec <1% |
PROST.28 0.0001 sec <1% |
PROST.29 0.0001 sec <1% |
PROST.15 0.0000 sec <1% |
PROST.16 0.0000 sec <1% |
PROST.13 0.0000 sec <1% |
PROST.12 0.0000 sec <1% |
PROST.10 0.0000 sec <1% |
PROST.11 0.0000 sec <1% |
Результаты профилирования по частоте prost. pas
Execution Profile
Total time: 0.4763 sec
% of total: 100%
Run: 1 of 1
Display: Count
Filter: All
Sort: Frequency
PROST.20 15120 45% |===========================================
PROST.24 14787 44% |==========================================
PROST.17 499 1% |=
PROST.25 498 1% |=
PROST.19 498 1% |=
PROST.23 333 1% |
PROST.22 333 1% |
PROST.28 166 <1% |
PROST.26 166 <1% |
PROST.29 166 <1% |
PROST.30 166 <1% |
PROST.27 166 <1% |
PROST.9 1 <1% |
PROST.16 1 <1% |
PROST.15 1 <1% |
PROST.13 1 <1% |
PROST.12 1 <1% |
PROST.10 1 <1% |
PROST.11 1 <1% |
PROST.31 1 <1% |
Результаты профилирования по средним временам на 1 вызов prost. pas
Execution Profile
Total time: 0.4763 sec
% of total: 100%
Run: 1 of 1
Display: Time per call
Filter: All
Sort: Frequency
PROST.9 0.0004 sec/call |===========================================
PROST.31 0.0004 sec/call |====================================
PROST.15 0.0000 sec/call |===
PROST.27 0.0000 sec/call |===
PROST.16 0.0000 sec/call |==
PROST.24 0.0000 sec/call |=
PROST.20 0.0000 sec/call |=
PROST.11 0.0000 sec/call |
PROST.19 0.0000 sec/call |
PROST.17 0.0000 sec/call |
PROST.10 0.0000 sec/call |
PROST.23 0.0000 sec/call |
PROST.13 0.0000 sec/call |
PROST.25 0.0000 sec/call |
PROST.26 0.0000 sec/call |
PROST.12 0.0000 sec/call |
PROST.28 0.0000 sec/call |
PROST.30 0.0000 sec/call |
PROST.29 0.0000 sec/call |
PROST.22 0.0000 sec/call |
Результаты профилирования по времени prost.c
Execution Profile
Total time: 0.7125 sec
% of total: 99 %
Run: 1 of 1
Display: Time
Filter: All
Sort: Frequency
#PROST_PAS#31 0.4751 sec 66%|===========================================
#PROST_PAS#22 0.0686 sec 9% |======
#PROST_PAS#17 0.0555 sec 7% |=====
#PROST_PAS#28 0.0553 sec 7% |=====
#PROST_PAS#19 0.0553 sec 7% |=====
#PROST_PAS#16 0.0006 sec <1% |
#PROST_PAS#21 0.0004 sec <1% |
#PROST_PAS#26 0.0003 sec <1% |
#PROST_PAS#24 0.0002 sec <1% |
#PROST_PAS#29 0.0002 sec <1% |
#PROST_PAS#30 0.0001 sec <1% |
#PROST_PAS#32 0.0001 sec <1% |
#PROST_PAS#33 0.0001 sec <1% |
_main 0.0000 sec <1% |
#PROST_PAS#14 0.0000 sec <1% |
#PROST_PAS#13 0.0000 sec <1% |
#PROST_PAS#11 0.0000 sec <1% |
#PROST_PAS#12 0.0000 sec <1% |
#PROST_PAS#35 0.0000 sec <1% |
Результаты профилирования по частоте prost. c
Execution Profile
Total time: 0.7125 sec
% of total: 99 %
Run: 1 of 1
Display: Counts
Filter: All
Sort: Frequency
#PROST_PAS#22 15122 82%|===========================================
#PROST_PAS#19 500 2% |=
#PROST_PAS#28 499 2% |=
#PROST_PAS#21 499 2% |=
#PROST_PAS#26 333 1% |
#PROST_PAS#29 333 1% |
#PROST_PAS#24 333 1% |
#PROST_PAS#31 166 <1% |
#PROST_PAS#32 166 <1% |
#PROST_PAS#33 166 <1% |
#PROST_PAS#30 166 <1% |
_main 1 <1% |
#PROST_PAS#17 1 <1% |
#PROST_PAS#16 1 <1% |
#PROST_PAS#14 1 <1% |
#PROST_PAS#13 1 <1% |
#PROST_PAS#11 1 <1% |
#PROST_PAS#12 1 <1% |
#PROST_PAS#35 1 <1% |
Результаты профилирования по средним временам на 1 вызов prost. c
Execution Profile
Total time: 0.7125 sec
% of total: 99 %
Run: 1 of 1
Display: Time per call
Filter: All
Sort: Frequency
#PROST_PAS#17 0.0555 sec/call |===========================================
#PROST_PAS#31 0.0028 sec/call |==
#PROST_PAS#16 0.0006 sec/call |
#PROST_PAS#28 0.0001 sec/call |
#PROST_PAS#19 0.0001 sec/call |
#PROST_PAS#22 0.0000 sec/call |
_main 0.0000 sec/call |
#PROST_PAS#21 0.0000 sec/call |
#PROST_PAS#14 0.0000 sec/call |
#PROST_PAS#24 0.0000 sec/call |
#PROST_PAS#26 0.0000 sec/call |
#PROST_PAS#13 0.0000 sec/call |
#PROST_PAS#29 0.0000 sec/call |
#PROST_PAS#30 0.0000 sec/call |
#PROST_PAS#12 0.0000 sec/call |
#PROST_PAS#32 0.0000 sec/call |
#PROST_PAS#11 0.0000 sec/call |
#PROST_PAS#33 0.0000 sec/call |
#PROST_PAS#35 0.0000 sec/call |
Выводы: Наиболее ресурсоемкой оказалась операция деления.
Так же к разряду «долгих» для выполнения команд можно отнести вывод на печать.
Обработка программ test_cyc.c, test_sub.c.
Программа test_cyc.c
#define Size 10000
int i, tmp, dim[Size];
void main()
{
for(i=0;i<Size/10;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
for(i=0;i<Size/5;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
for(i=0;i<Size/2;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
for(i=0;i<Size;i++) { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
for(i=0;i<Size/10;i++)
{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
for(i=0;i<Size/5;i++)
{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
for(i=0;i<Size/2;i++)
{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
for(i=0;i<Size;i++)
{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };
for(i=0;i<Size/10;i++)
{ tmp=dim[0];
dim[0]=dim[i];
dim[i]=tmp;
};
for(i=0;i<Size/5;i++)
{ tmp=dim[0];
dim[0]=dim[i];
dim[i]=tmp;
};
for(i=0;i<Size/2;i++)
{ tmp=dim[0];
dim[0]=dim[i];
dim[i]=tmp;
};
for(i=0;i<Size;i++)
{ tmp=dim[0];
dim[0]=dim[i];
dim[i]=tmp;
};
}
Результаты профилирования по времени test_cyc.c
Execution Profile
Total time: 0.7233 sec
% of total: 99 %
Run: 1 of 1
Display: Time
Filter: All
Sort: Frequency
#TEST_СYC#35 0.2283 sec 31% |===========================================
#TEST_СYC#17 0.1735 sec 24% |=================================
#TEST_СYC#36 0.0638 sec 8% |============
#TEST_СYC#29 0.0593 sec 8% |===========
#TEST_СYC#31 0.0592 sec 8% |===========
#TEST_СУC#15 0.0592 sec 8% |===========
#TEST_СYC#20 0.0558 sec 7% |==========
#TEST_СУC#34 0.0088 sec 1% |=
#TEST_СYC#30 0.0044 sec <1% |
#TEST_СYC#26 0.0021 sec <1% |
#TEST_СYC#13 0.0017 sec <1% |
#TEST_СYC#25 0.0017 sec <1% |
#TEST_СYC#24 0.0017 sec <1% |
#TEST_СYC#21 0.0009 sec <1% |
#TEST_СYC#11 0.0009 sec <1%|
#TEST_СYC#19 0.0009 sec <1%|
#TEST_СYC#9 0.0001 sec <1% |
#TEST_СYC#8 0.0000 sec <1% |
#TEST_СYC#7 0.0000 sec <1% |
#TEST_СYC#6 0.0000 sec <1% |
_main 0.0000 sec <1% |
#TEST_СYC#28 0.0000 sec <1% |
#TEST_СYC#23 0.0000 sec <1% |
#TEST_СYC#18 0.0000 sec <1% |
#TEST_СYC#16 0.0000 sec <1% |
#TEST_СYC#33 0.0000 sec <1% |
#TEST_СYC#14 0.0000 sec <1% |
#TEST_СYC#10 0.0000 sec <1% |
#TEST_СYC#12 0.0000 sec <1% |
#TEST_СYC#38 0.0000 sec <1% |
Результаты профилирования по частоте test_сyc.c
Execution Profile
Total time: 0.7233 sec
% of total: 99 %
Run: 1 of 1
Display: Counts
Filter: All
Sort: Frequency
#TEST_СYC#17 10000 13% |===========================================
#TEST_СYC#36 10000 13% |===========================================
#TEST_СYC#34 10000 13% |===========================================
#TEST_СYC#35 10000 13% |===========================================
#TEST_СYC#15 5000 6% |=====================
#TEST_СYC#30 5000 6% |=====================
#TEST_СYC#29 5000 6% |=====================
#TEST_СYC#31 5000 6% |=====================
#TEST_СYC#24 2000 2% |========
#TEST_СYC#13 2000 2% |========
#TEST_СYC#26 2000 2% |========
#TEST_СYC#25 2000 2% |========
#TEST_СYC#21 1000 1% |====
#TEST_СYC#11 1000 1% |====
#TEST_СYC#20 1000 1% |====
#TEST_СУC#19 1000 1% |====
_main 1 <1% |
#TEST_СYC#23 1 <1% |
#TEST_СYC#18 1 <1% |
#TEST_СYC#16 1 <1% |
#TEST_СYC#14 1 <1% |
#TEST_СYC#28 1 <1% |
#TEST_СYC#12 1 <1% |
#TEST_СYC#10 1 <1% |
#TEST_СYC#9 1 <1% |
#TEST_СYC#33 1 <1% |
#TEST_СYC#8 1 <1% |
#TEST_СYC#6 1 <1% |
#TEST_СYC#7 1 <1% |
#TEST_СYC#38 1 <1% |
Результаты профилирования по средним временам на 1 вызов test_сyc.c
Execution Profile
Total time: 0.7233 sec
% of total: 99 %
Run: 1 of 1
Display: Time per call
Filter: All
Sort: Frequency
#TEST_СYC#9 0.0001 sec/call |===========================================
#TEST_СYC#20 0.0000 sec/call |=======================
#TEST_СYC#8 0.0000 sec/call |====================
#TEST_СYC#35 0.0000 sec/call |=========
#TEST_СYC#17 0.0000 sec/call |=======
#TEST_СYC#7 0.0000 sec/call |=======
#TEST_СYC#15 0.0000 sec/call |=====
#TEST_СYC#29 0.0000 sec/call |=====
#TEST_СYC#31 0.0000 sec/call |=====
#TEST_СYC#6 0.0000 sec/call |==
#TEST_СYC#36 0.0000 sec/call |==
_main 0.0000 sec/call |
#TEST_СYC#16 0.0000 sec/call |
#TEST_СYC#18 0.0000 sec/call |
#TEST_СYC#19 0.0000 sec/call |
#TEST_СYC#14 0.0000 sec/call |
#TEST_СYC#21 0.0000 sec/call |
#TEST_СYC#23 0.0000 sec/call |
#TEST_СYC#24 0.0000 sec/call |
#TEST_СYC#25 0.0000 sec/call |
#TEST_СYC#26 0.0000 sec/call |
#TEST_СYC#28 0.0000 sec/call |
#TEST_СYC#13 0.0000 sec/call |
#TEST_СYC#30 0.0000 sec/call |
#TEST_СYC#12 0.0000 sec/call |
#TEST_СYC#33 0.0000 sec/call |
#TEST_СYC#34 0.0000 sec/call |
#TEST_СУC#10 0.0000 sec/call |
#TEST_СYC#11 0.0000 sec/call |
#TEST_СYC#38 0.0000 sec/call |
По результатам проведенного профилирования можно сделать следующие выводы: когда цикл вместе с заголовком записан в одну строку, его выполнение занимает незначительный промежуток времени. Когда тело цикла записано в отдельную строку (без заголовка цикла) время выполнения цикла растет. Когда каждый оператор цикла (в том числе и заголовок) записан в отдельную строку, то уже рассматривается время выполнения каждого оператора по отдельности и в результате время выполнения всего цикла значительно возрастает.
Результаты профилирования test_sub.cpp
Программа test_sub.cpp
const unsigned Size = 1000;
void TestLoop(int nTimes)
{
static int TestDim[Size];
int tmp;
int iLoop;
while (nTimes > 0)
{
nTimes --;
iLoop = Size;
while (iLoop > 0)
{
iLoop -- ;
tmp = TestDim[0];
TestDim[0] = TestDim[nTimes];
TestDim[nTimes] = tmp;
}
}
} /* TestLoop */
void main()
{
TestLoop(Size / 10); // 100 * 1000 повторений
TestLoop(Size / 5); // 200 * 1000 повторений
TestLoop(Size / 2); // 500 * 1000 повторений
TestLoop(Size / 1); // 1000* 1000 повторений
}
Результаты профилирования по времени test_ sub.c
Execution Profile
Total time: 8.4911 sec
% of total: 99%
Run: 1 of 1
Display: Time
Filter: All
Sort: Frequency
#TEST_SUB#20 2.1170 sec 24% |===========================================
#TEST_SUB#17 1.8410 sec 21% |=====================================
#TEST_SUB#15 1.7300 sec 20% |===================================
#TEST_SUB#19 1.5658 sec 18% |===============================
#TEST_SUB#18 1.2367 sec 14% |=========================
#TEST_SUB#14 0.0001 sec <1% |
#TEST_SUB#10 0.0001 sec <1% |
#TEST_SUB#12 0.0001 sec <1% |
TestLoop 0.0000 sec <1% |
#TEST_SUB#28 0.0000 sec <1% |
#TEST_SUB#23 0.0000 sec <1% |
_main
#TEST_SUB#29 0.0000 sec <1% |
Результаты профилирования по частоте test_ sub.c
Execution Profile
Total time: 8.4911 sec
% of total: 99 %
Run: 1 of 1
Display: Counts
Filter: All
Sort: Frequency
#TEST_SUB#15 154975 20% |===========================================
#TEST_SUB#17 154221 19% |==========================================
#TEST_SUB#18 154221 19% |==========================================
#TEST_SUB#19 154220 19% |==========================================
#TEST_SUB#20 154220 19% |
#TEST_SUB#10 159 <1% |
#TEST_SUB#12 155 <1% |
#TEST_SUB#14 155 <1% |
TestLoop 2 <1% |
#TEST_SUB#23 1 <1% |
#TEST_SUB#28 1 <1% |
_main 1 <1% |
#TEST_SUB#29 1 <1% |
#TEST_SUB#31 2 <1% |
#TEST_SUB#30 2 <1% |
#TEST_SUB#32 1 <1% |
Результаты профилирования по средним временам на 1 вызов test_ sub.c
Execution Profile
Total time: 8.4911 sec
% of total: 99 %
Run: 1 of 1
Display: Time per call
Filter: All
Sort: Frequency
#TEST_SUB#20 0.0000 sec/call |===========================================
#TEST_SUB#17 0.0000 sec/call |======================================
#TEST_SUB#15 0.0000 sec/call |===================================
#TEST_SUB#19 0.0000 sec/call |=================================
#TEST_SUB#18 0.0000 sec/call |=========================
#TEST_SUB#28 0.0000 sec/call |=====
TestLoop 0.0000 sec/call |==
#TEST_SUB#14 0.0000 sec/call |==
#TEST_SUB#10 0.0000 sec/call |==
#TEST_SUB#23 0.0000 sec/call |==
#TEST_SUB#12 0.0000 sec/call |==
_main 0.0000 sec/call |==
#TEST_SUB#29 0.0000 sec/call |==
Выводы: как показали проведенные исследования дольше всех выполняется внутренний цикл подпрограммы. Время же команд вызова подпрограммы незначительно мало.
Обработка собственной программы
Программа bessy.pas
Turbo Profiler Version 2.1 Sat Mar 20 13:29:54 2004
Program: G:\UNIVER~1\86DED~1\0423~1\LAB_2\LAB_PAS\LAB1.EXE File \UNIVER~1\86DED
Time Counts
program besy;
var x,ordr : real;
done : boolean;
i : integer;
function bessy(x,n: real): real;
const small = 1.0E-8;
euler = 0.57721566;
pi = 3.1415926;
pi2 = 0.63661977;
var j : integer;
x2,sum,sum2,t,t2,
ts,term,xx,y0,y1,
ya,yb,yc,ans,a,b,
sina,cosa : real;
0.0008 1000 begin
0.0008 1000 if x<12 then
begin
0.0008 1000 xx:=0.5*x;
0.0557 1000 x2:=xx*xx;
0.0008 1000 t:=ln(xx)+euler;
0.0558 1000 sum:=0.0;
0.0012 1000 term:=t;
0.0008 1000 y0:=t;
0.0558 1000 j:=0;
repeat
0.1759 13000 j:=j+1;
0.1210 13000 if j<>1 then sum:=sum+1/(j-1);
0.0115 13000 ts:=t-sum;
0.2310 13000 term:=-x2*term/(j*j)*(1-1/(j*ts));
0.2311 13000 y0:=y0+term
0.2310 13000 until abs(term)<small;
0.0009 1000 term:=xx*(t-0.5);
0.0008 1000 sum:=0.0;
0.0008 1000 y1:=term;
0.0008 1000 j:=1;
repeat
0.1767 12000 j:=j+1;
0.0651 12000 sum:=sum+1/(j-1);
0.0101 12000 ts:=t-sum;
0.1751 12000 term:=(-x2*term)/(j*(j-1))*((ts-0.5/j)/(ts+0.5/(j-1)));
0.0103 12000 y1:=y1+term
0.1202 12000 until abs(term)<small;
0.0557 1000 y0:=pi2*y0;
0.0557 1000 y1:=pi2*(y1-1/x);
0.0557 1000 if n=0.0 then ans:=y0
0.0008 1000 else if n=1.0 then ans:=y1
else
begin
0 0 ts:=2.0/x;
0 0 ya:=y0;
0 0 yb:=y1;
0 0 for j:=2 to trunc(n+0.01) do
begin
Turbo Profiler Version 2.1 Sat Mar 20 13:29:54 2004
0 0 yc:=ts*(j-1)*yb-ya;
0 0 ya:=yb;
0 0 yb:=yc
0 0 end;
0 0 ans:=yc
end;
0.0009 1000 bessy:=ans;
0.0008 1000 end
0 0 else bessy:=sqrt(2/(pi*x))*sin(x-pi/4-n*pi/2)
0.0009 1000 end;
0.0005 1 begin
0.0000 1 for i:=1 to 1000 do
begin
0.0008 1000 done:=false;
0.0008 1000 ordr:=1;
repeat
0.0016 2000 if ordr<0.0 then done:=true
else
begin
repeat
0.0008 1000 x:=5;
0.0008 1000 until x>=0.0;
{writeln(}
0.0008 1000 bessy(x,ordr);
{);}
0.0008 1000 ordr:=-1;
end
0.0017 2000 until done
0.0009 1000 end;
0.0004 1 end.
Результаты профилирования по времени bessy.pas
Execution Profile
Total time: 1.9175 sec
% of total: 100%
Run: 1 of 1
Display: Time
Filter: All
Sort: Frequency
#BESSY_PAS#36 0.2311 sec 12% |===========================================
#BESSY_PAS#35 0.2310 sec 12% |==========================================
#BESSY_PAS#37 0.2310 sec 12% |==========================================
#BESSY_PAS#43 0.1767 sec 9% |================================
#BESSY_PAS#32 0.1759 sec 9% |================================
#BESSY_PAS#46 0.1751 sec 9% |================================
#BESSY_PAS#33 0.1210 sec 6% |======================
#BESSY_PAS#48 0.1202 sec 6% |======================
#BESSY_PAS#44 0.0651 sec 3% |============
#BESSY_PAS#27 0.0558 sec 2% |==========
#BESSY_PAS#30 0.0558 sec 2% |==========
#BESSY_PAS#49 0.0557 sec 2% |==========
#BESSY_PAS#25 0.0557 sec 2% |==========
#BESSY_PAS#50 0.0557 sec 2% |==========
#BESSY_PAS#51 0.0557 sec 2% |==========
#BESSY_PAS#34 0.0115 sec <1% |==
#BESSY_PAS#47 0.0103 sec <1% |=
#BESSY_PAS#45 0.0101 sec <1% |=
#BESSY_PAS#88 0.0017 sec <1% |
#BESSY_PAS#77 0.0016 sec <1% |
#BESSY_PAS#28 0.0012 sec <1% |
#BESSY_PAS#69 0.0009 sec <1% |
#BESSY_PAS#38 0.0009 sec <1% |
#BESSY_PAS#89 0.0009 sec <1% |
#BESSY_PAS#66 0.0009 sec <1% |
#BESSY_PAS#67 0.0008 sec <1% |
#BESSY_PAS#84 0.0008 sec <1% |
#BESSY_PAS#82 0.0008 sec <1% |
#BESSY_PAS#22 0.0008 sec <1% |
#BESSY_PAS#39 0.0008 sec <1% |
#BESSY_PAS#86 0.0008 sec <1% |
#BESSY_PAS#26 0.0008 sec <1% |
#BESSY_PAS#74 0.0008 sec <1% |
#BESSY_PAS#75 0.0008 sec <1% |
BESSY 0.0008
#BESSY_PAS#24 0.0008 sec <1% |
#BESSY_PAS#29 0.0008 sec <1% |
#BESSY_PAS#81 0.0008 sec <1% |
#BESSY_PAS#52 0.0008 sec <1% |
#BESSY_PAS#40 0.0008 sec <1% |
#BESSY_PAS#41 0.0008 sec <1% |
#BESSY_PAS#71 0.0005 sec <1% |
#BESSY_PAS#70 0.0005 sec <1% |
#BESSY_PAS#72 0.0005 sec <1% |
Результаты профилирования по частоте bessy.pas
Execution Profile
Total time: 1.9175 sec
% of total: 100 %
Run: 1 of 1
Display: Counts
Filter: All
Sort: Frequency
#BESSY_PAS#37 13000 7% |===========================================
#BESSY_PAS#36 13000 7% |===========================================
#BESSY_PAS#35 13000 7% |===========================================
#BESSY_PAS#34 13000 7% |===========================================
#BESSY_PAS#32 13000 7% |===========================================
#BESSY_PAS#33 13000 7% |===========================================
#BESSY_PAS#44 12000 6% |======================================
#BESSY_PAS#45 12000 6% |======================================
#BESSY_PAS#43 12000 6% |======================================
#BESSY_PAS#46 12000 6% |======================================
#BESSY_PAS#48 12000 6% |======================================
#BESSY_PAS#47 12000 6% |======================================
#BESSY_PAS#77 2000 1% |======
#BESSY_PAS#88 2000 1% |======
BESSY 1000 3% |===
#BESSY_PAS#38 1000 3% |===
#BESSY_PAS#39 1000 3% |===
#BESSY_PAS#40 1000 3% |===
#BESSY_PAS#41 1000 3% |===
#BESSY_PAS#30 1000 3% |===
#BESSY_PAS#22 1000 3% |===
#BESSY_PAS#28 1000 3% |===
#BESSY_PAS#27 1000 3% |===
#BESSY_PAS#26 1000 3% |===
#BESSY_PAS#25 1000 3% |===
#BESSY_PAS#49 1000 3% |===
#BESSY_PAS#50 1000 3% |===
#BESSY_PAS#51 1000 3% |===
#BESSY_PAS#52 1000 3% |===
#BESSY_PAS#66 1000 3% |===
#BESSY_PAS#67 1000 3% |===
#BESSY_PAS#69 1000 3% |===
#BESSY_PAS#29 1000 3% |===
#BESSY_PAS#89 1000 3% |===
#BESSY_PAS#74 1000 3% |===
#BESSY_PAS#75 1000 3% |===
#BESSY_PAS#24 1000 3% |===
#BESSY_PAS#81 1000 3% |===
#BESSY_PAS#84 1000 3% |===
#BESSY_PAS#82 1000 3% |===
#BESSY_PAS#86 1000 3% |===
#BESSY_PAS#72 1<1% |
#BESSY_PAS#71 1<1% |
#BESSY_PAS#90 1<1% |
Результаты профилирования по средним временам на 1 вызов bessy.pas
Execution Profile
Total time: 0,0040 sec
% of total: 100 %
Run: 1 of 1
Display: Time per call
Filter: All
Sort: Frequency
#BESSY_PAS#71 0.0005 sec/call |===========================================
#BESSY_PAS#90 0.0004 sec/call |=======
#BESSY_PAS#30 0.0000 sec/call |======
#BESSY_PAS#25 0.0000 sec/call|
#BESSY_PAS#50 0.0000 sec/call|
#BESSY_PAS#27 0.0000 sec/call|
#BESSY_PAS#51 0.0000 sec/call|
#BESSY_PAS#49 0.0000 sec/call|
#BESSY_PAS#35 0.0000 sec/call|
#BESSY_PAS#36 0.0000 sec/call|
#BESSY_PAS#37 0.0000 sec/call|
#BESSY_PAS#46 0.0000 sec/call|
#BESSY_PAS#43 0.0000 sec/call|
#BESSY_PAS#32 0.0000 sec/call|
#BESSY_PAS#33 0.0000 sec/call|
#BESSY_PAS#48 0.0000 sec/call|
#BESSY_PAS#44 0.0000 sec/call|
#BESSY_PAS#34 0.0000 sec/call|
#BESSY_PAS#41 0.0000 sec/call|
#BESSY_PAS#40 0.0000 sec/call|
#BESSY_PAS#39 0.0000 sec/call|
#BESSY_PAS#45 0.0000 sec/call|
#BESSY_PAS#29 0.0000 sec/call|
#BESSY_PAS#47 0.0000 sec/call|
#BESSY_PAS#38 0.0000 sec/call|
#BESSY_PAS#28 0.0000 sec/call|
#BESSY_PAS#26 0.0000 sec/call|
#BESSY_PAS#24 0.0000 sec/call|
#BESSY_PAS#52 0.0000 sec/call|
#BESSY_PAS#66 0.0000 sec/call|
#BESSY_PAS#67 0.0000 sec/call|
#BESSY_PAS#69 0.0000 sec/call|
#BESSY_PAS#22 0.0000 sec/call|
#BESSY_PAS#72 0.0000 sec/call|
#BESSY_PAS#74 0.0000 sec/call|
#BESSY_PAS#75 0.0000 sec/call|
#BESSY_PAS#77 0.0000 sec/call|
#BESSY_PAS#81 0.0000 sec/call|
#BESSY_PAS#82 0.0000 sec/call|
#BESSY_PAS#84 0.0000 sec/call|
#BESSY_PAS#86 0.0000 sec/call|
#BESSY_PAS#89 0.0000 sec/call|
#BESSY_PAS#88 0.0000 sec/call|
BESSY 0.0000 sec/call|
Программа bessy.c
#include <math.h>
#include <stdio.h>
float bessy (float x, float n)
{
const float small = 1.0E-8;
const float euler = 0.57721566;
const float pi = 3.1415926;
const float pi2 = 0.63661977;
int j;
float x2,sum,sum2,t,t2,
ts,term,xx,y0,y1,
ya,yb,yc,ans,a,b,
sina,cosa;
if (x<12) {
xx = 0.5 * x;
x2 = xx * xx;
t= log(xx) + euler;
sum = 0.0;
term = t;
y0 = t;
j = 0;
do{
j=j+1;
if (j != 1) {sum = sum + 1 / (j - 1);}
ts = t - sum;
term = -x2 * term / (j * j)*(1 - 1/(j * ts));
y0 = y0 + term;
}while ( fabs(term) >= small);
term = xx * (t - 0.5);
sum = 0.0;
y1 = term;
j = 1;
do{
j = j + 1;
sum = sum + 1.0 / (j - 1);
ts = t - sum;
term = (-x2 * term)/(j * (j - 1))*((ts - 0.5/j)/(ts + 0.5/(j - 1)));
y1 = y1 + term;
}while (fabs(term) >= small);
y0 = pi2 * y0;
y1 = pi2 * (y1 - 1/x);
if (n==0.0) {ans = y0;}
else {if (n==1.0) {ans = y1;}
else
{
ts = 2.0 / x;
ya = y0;
yb = y1;
for (j=2; j<ceil(n+0.01);j+1)
{
yc = ts * (j - 1) * yb - ya;
ya = yb;
yb = yc;
}
ans = yc;
}}
return ans;
}
else return sqrt(2 /(pi * x)) * sin(x - pi/4 - n * pi/2);