(*~\Глагол\ПриложенияЧисАн\64\д\Быстродействие\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                      ОТДЕЛ СкоростьФункций1ВещАргумента+;
(*============================================================================*
 * НАЗНАЧЕНИЕ: измерение быстроты вычислений
 *   математических функций от одного вещественного аргумента на Глаголе
 *============================================================================*)

ИСПОЛЬЗУЕТ 
 дМатем   ИЗ "..\..\..\..\Отделы\ЧисАн\64\д\",

  ОС      ИЗ "..\..\..\..\Отделы\Обмен\",
  НаЭкран ИЗ "..\..\..\..\Отделы\Обмен\ВводВывод\";

ВИД
        (* вид Вещ - это удвоенная точность 64 разряда (16 десятичных знаков) *)
  Вещ = дМатем.Вещ;                   (* локально *)

  Функция = ЗАДАЧА(x:Вещ):Вещ;

ПОСТ
  ВЫЧИСЛЕНИЙ = 10000000; (* 10 млн.- число вычислений каждой функции *)


(*=рррррррррррррррррррррррр= реализация задач =рррррррррррррррррррррррррррррр=*)

  
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ВремяВычисления(f:Функция):ВЕЩ;
ПЕР
  i,начВремя:ЦЕЛ;
    вX,
  значение:Вещ;
УКАЗ
    вX:=дМатем.случ();
  начВремя:=ОС.Время();
  ОТ i:=1 ДО ВЫЧИСЛЕНИЙ ВЫП   (*  10 млн. - вычислений функции 1-го аргумента *)
    значение:=f(вX)          (*                        с точностью дМатем.Вещ *)
  КОН;
  ВОЗВРАТ (ОС.Время()-начВремя)/1000
(*
         измеренноеВремя:=ОС.Время()-начВремя;
  сотые:=измеренноеВремя ДЕЛИТЬ 10;
  секунды:=сотые ДЕЛИТЬ 100;
  минуты:=секунды ДЕЛИТЬ 60;
  часы:=минуты ДЕЛИТЬ 60;
в секундомере:
  Записка.ИзЧЦел(записаноВремя,"%.2d:%.2d:%.2d.%.2d",
    часы,минуты ОСТАТОК 60,секунды ОСТАТОК 60,сотые ОСТАТОК 100)
*)
КОН ВремяВычисления;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ВремяВычФункцииСлучАргумента(f:Функция):ВЕЩ;
ПЕР
  i,начВремя:ЦЕЛ;
  значение:Вещ;
УКАЗ
  начВремя:=ОС.Время();
  ОТ i:=1 ДО ВЫЧИСЛЕНИЙ ВЫП  (*  10 млн. - вычислений функции 1-го случайного *)
    значение:=f(дМатем.случ())(*             аргумента с точностью дМатем.Вещ *)
  КОН;
  ВОЗВРАТ (ОС.Время()-начВремя)/1000
КОН ВремяВычФункцииСлучАргумента;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ВремяУмножений():ВЕЩ;
ПЕР
  i,начВремя:ЦЕЛ;
    вX,
    вY,
  значение:Вещ;
УКАЗ
    вX:=дМатем.случ();
    вY:=дМатем.случ();
  начВремя:=ОС.Время();
  ОТ i:=1 ДО ВЫЧИСЛЕНИЙ ВЫП    (*  10 млн. - умножение с точностью дМатем.Вещ *)
    значение:=вX*вY         
  КОН;
  ВОЗВРАТ (ОС.Время()-начВремя)/1000
КОН ВремяУмножений;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ВремяСлучУмножений():ВЕЩ;
ПЕР
  i,начВремя:ЦЕЛ;
    вX,
    вY,
  значение:Вещ;
УКАЗ
  начВремя:=ОС.Время();
  ОТ i:=1 ДО ВЫЧИСЛЕНИЙ ВЫП    (*  10 млн. - умножение с точностью дМатем.Вещ *)
    вX:=дМатем.случ();
    вY:=дМатем.случ();
    значение:=вX*вY         
  КОН;
  ВОЗВРАТ (ОС.Время()-начВремя)/1000
КОН ВремяСлучУмножений;

(*-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-*)
УКАЗ
 НаЭкран.Вещ4числа("^Время %d вычислений функций одного вещественного аргумента в сек.",ВЫЧИСЛЕНИЙ,0,0,0);
 НаЭкран.Вещ4числа("^ [секунды=(ОС.Время()-начВремя)/1000] и вещ.умножений - вX*вY^  и вещ.умножений сл.аргументов - дМатем.случ()*дМатем.случ() :^",0,0,0,0);
 НаЭкран.Вещ4числа("^ln    (Вещ) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.ln    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("log10 (Вещ) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.log10 ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("log2  (Вещ) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.log2  ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("exp   (Вещ) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.exp   ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("exp10 (Вещ) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.exp10 ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("exp2  (Вещ) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.exp2  ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("sin  (Вещ)  = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.sin   ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("cos  (Вещ)  = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.cos   ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("tg   (Вещ)  = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.tg    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("arcsin (Вещ)= %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.arcsin),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("arccos (Вещ)= %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.arccos),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("arctg (Вещ) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.arctg ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("sh (Вещ)    = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.sh    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("ch (Вещ)    = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.ch    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("th (Вещ)    = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.th    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("Arsh (Вещ)  = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.Arsh  ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("Arth (Вещ)  = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.Arth  ),ВремяУмножений(),ВремяСлучУмножений(),0);
(*
  НаЭкран.Вещ4числа("Г (Вещ)     = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.ln    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("erf (Вещ)   = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.ln    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("erfc (Вещ)  = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычисления(дМатем.ln    ),ВремяУмножений(),ВремяСлучУмножений(),0);
*)
 НаЭкран.Вещ4числа("^Время %d вычислений функций одного сл.аргумента f(дМатем.случ()) в сек.",ВЫЧИСЛЕНИЙ,0,0,0);
 НаЭкран.Вещ4числа("^ [секунды=(ОС.Время()-начВремя)/1000] и вещ.умножений - вX*вY^  и вещ.умножений сл.аргументов - дМатем.случ()*дМатем.случ() :^",0,0,0,0);
 НаЭкран.Вещ4числа("^ln    (дМатем.случ()) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.ln    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("log10 (дМатем.случ()) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.log10 ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("log2  (дМатем.случ()) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.log2  ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("exp   (дМатем.случ()) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.exp   ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("exp10 (дМатем.случ()) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.exp10 ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("exp2 (дМатем.случ())  = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.exp2  ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("sin (дМатем.случ())   = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.sin   ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("cos (дМатем.случ())   = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.cos   ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("tg (дМатем.случ())    = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.tg    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("arcsin (дМатем.случ())= %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.arcsin),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("arccos (дМатем.случ())= %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.arccos),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("arctg (дМатем.случ()) = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.arctg ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("sh (дМатем.случ())    = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.sh    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("ch (дМатем.случ())    = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.ch    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("th (дМатем.случ())    = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.th    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("Arsh (дМатем.случ())  = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.Arsh  ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("Arth (дМатем.случ())  = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.Arth  ),ВремяУмножений(),ВремяСлучУмножений(),0);
(*
  НаЭкран.Вещ4числа("Г (дМатем.случ())     = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.ln    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("erf (дМатем.случ())   = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.ln    ),ВремяУмножений(),ВремяСлучУмножений(),0);
  НаЭкран.Вещ4числа("erfc (дМатем.случ())  = %6.3f сек.  вX*вY=%4.3f  умнож.сл.арг вX*вY=%5.3f сек.^",ВремяВычФункцииСлучАргумента(дМатем.ln    ),ВремяУмножений(),ВремяСлучУмножений(),0);
*)
КОН СкоростьФункций1ВещАргумента.
