Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №31.doc
Скачиваний:
15
Добавлен:
01.05.2014
Размер:
171.52 Кб
Скачать

Программа на Паскаль Измерение полного времени выполнения программы

Текст программы:

  1. program erfd3;

  2. uses sampler;

  3. const PName:String[8] = 'GAUSS.PAS';

  4. const count =3;

  5. var x,er,ec : real;

  6. done : boolean;

  7. function erf(x: real): real;

  8. const sqrtpi = 1.7724538;

  9. tol = 1.0E-4;

  10. var x2,sum,sum1,term: real;

  11. k,i : integer;

  12. begin

  13. x2:=x*x;

  14. sum:=x;

  15. term:=x;

  16. i:=0;

  17. repeat

  18. i:=i+1;

  19. sum1:=sum;

  20. term:=2.0*term*x2/(1.0+2.0*i);

  21. sum:=term+sum1

  22. until term<tol*sum;

  23. erf:=2.0*sum*exp(-x2)/sqrtpi

  24. end; { erf }

  25. function erfc(x: real): real;

  26. const sqrtpi = 1.7724538;

  27. terms = 12;

  28. var x2,u,v,sum : real;

  29. i : integer;

  30. begin

  31. x2:=x*x;

  32. v:=1.0/(2.0*x2);

  33. u:=1.0+v*(terms+1.0);

  34. for i:=terms downto 1 do

  35. begin

  36. sum:=1.0+i*v/u;

  37. u:=sum

  38. end;

  39. erfc:=exp(-x2)/(x*sum*sqrtpi)

  40. end; { ercf }

  41. var k : integer;

  42. begin { main }

  43. SAMPLE(PName,46);

  44. randomize;

  45. done:=false;

  46. for k:=1 to count do

  47. begin

  48. x:=random(100)/100;

  49. if x<0.0 then done:=true

  50. else

  51. begin

  52. if x=0.0 then

  53. begin

  54. er:=0.0;

  55. ec:=1.0

  56. end

  57. else

  58. begin

  59. if x<1.5 then

  60. begin

  61. er:=erf(x);

  62. ec:=1.0-er

  63. end

  64. else

  65. begin

  66. ec:=erfc(x);

  67. er:=1.0-ec

  68. end { if }

  69. end;

  70. end { if }

  71. end;

  72. SAMPLE(PName,75);

  73. end.

Результаты профилирования:

----------------------------------------------------------------------

NN Имя обработанного файла

----------------------------------------------------------------------

1. MMM20.PA

----------------------------------------------------------------------

Таблица с результатами измерений ( используется 2 из 416 записей )

----------------------------------------------------------------------

Исх.Поз. Прием.Поз. Общее время(мкс) Кол-во прох. Среднее время(мкс)

----------------------------------------------------------------------

1 : 56 1 : 91 36.88 1 36.88

----------------------------------------------------------------------

Измерение времен выполнения функциональных участков

Программа:

  1. program erfd3;

  2. uses sampler;

  3. const PName:String[8] = 'GAUSS.PAS';

  4. const count =3;

  5. var x,er,ec : real;

  6. done : boolean;

  7. function erf(x: real): real;

  8. const sqrtpi = 1.7724538;

  9. tol = 1.0E-4;

  10. var x2,sum,sum1,term: real;

  11. k,i : integer;

  12. begin

  13. x2:=x*x;

  14. SAMPLE(PName,14);

  15. sum:=x;

  16. term:=x;

  17. i:=0;

  18. SAMPLE(PName,18);

  19. repeat

  20. SAMPLE(PName,20);

  21. i:=i+1;

  22. sum1:=sum;

  23. term:=2.0*term*x2/(1.0+2.0*i);

  24. sum:=term+sum1

  25. SAMPLE(PName,25);

  26. until term<tol*sum;

  27. SAMPLE(PName,27);

  28. erf:=2.0*sum*exp(-x2)/sqrtpi;

  29. SAMPLE(PName,29);

  30. end; { erf }

  1. function erfc(x: real): real;

  2. const sqrtpi = 1.7724538;

  3. terms = 12;

  1. var x2,u,v,sum : real;

  2. i : integer;

  3. begin

  4. SAMPLE(PName,39);

  5. x2:=x*x;

  6. v:=1.0/(2.0*x2);

  7. u:=1.0+v*(terms+1.0);

  8. SAMPLE(PName,43);

  9. for i:=terms downto 1 do

  10. begin

  11. sum:=1.0+i*v/u;

  12. u:=sum

  13. end;

  14. SAMPLE(PName,49);

  15. erfc:=exp(-x2)/(x*sum*sqrtpi)

  16. SAMPLE(PName,51);

  17. end; { ercf }

  1. var k : integer;

  2. begin { main }

  3. SAMPLE(PName,56);

  4. randomize;

  5. done:=false;

  6. SAMPLE(PName,59);

  7. for k:=1 to count do

  8. begin

  9. SAMPLE(PName,62);

  10. x:=random(100)/100;

  11. if x<0.0 then done:=true

  12. else

  13. begin

  14. if x=0.0 then

  15. begin

  16. er:=0.0;

  17. ec:=1.0

  18. end

  19. else

  20. begin

  21. if x<1.5 then

  22. begin

  23. SAMPLE(PName,76);

  24. er:=erf(x);

  25. ec:=1.0-er

  26. SAMPLE(PName,79);

  27. end

  28. else

  29. begin

  30. SAMPLE(PName,83);

  31. ec:=erfc(x);

  32. er:=1.0-ec

  33. SAMPLE(PName,86);

  34. end { if }

  35. end;

  36. end { if }

  37. end;

  38. SAMPLE(PName,91);

  39. end.