05.10.2015, 02:39 | #1 (permalink) |
Новичок
Регистрация: 17.09.2015
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Определение машинного эпсилон
У меня есть такой вариант эпсилон: PROGRAM lab1_eps; uses crt; var e,e1:double; procedure vichisl_eps(e1:double; var e:double); begin e:=1; e1:=2; while (e1>1) do begin e:=e/2; e1:=1+e; end; e:=e*2; end; BEGIN clrscr; vichisl_eps(e1,e); writeln; writeln('Mashinnoe epsilon=',e); readln; END. Как сделать для различных типов данных, и как добавить чтобы выводилось время выполнения для каждого из типов? |
05.10.2015, 02:39 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Рекомендую обратить особое внимание на похожи темы Определение диода Определение микросхемы? Определение радиоэлементов Определение радиоэлемента Знатоки, подскажите по ГД3030-1 и Эпсилон-50А |
05.10.2015, 14:22 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Если только по рабоче-крестьянски (показано ниже).Формально ввёл, но это бессмысленно: там "квант" времени - 10 мсек, а цикл даже на моём DOS-эмуляторе гораздо короче. Так что, похоже, никак: времена оказываются нулевыми.
Код:
PROGRAM lab1_eps; uses CRT, DOS; var e_s,e1_s:single; e_r,e1_r:real; e_d,e1_d:double; e_e,e1_e:extended; h,min,sec,sec100:Word; Time1,Time2:LongInt; Begin e_s:=1; e1_s:=2; GetTime(h,min,sec,sec100); Time1:=h*360000+min*6000+sec*100+sec100; while (e1_s>1) do begin e_s:=e_s/2; e1_s:=1+e_s; end; e_s:=e_s*2; GetTime(h,min,sec,sec100); Time2:=h*360000+min*6000+sec*100+sec100; Writeln('Single: eps= ',e_s,' time = ',(Time2-Time1)*10,' ms'); e_r:=1; e1_r:=2; GetTime(h,min,sec,sec100); Time1:=h*360000+min*6000+sec*100+sec100; while (e1_r>1) do begin e_r:=e_r/2; e1_r:=1+e_r; end; e_r:=e_r*2; GetTime(h,min,sec,sec100); Time2:=h*360000+min*6000+sec*100+sec100; Writeln('Real: eps= ',e_r,' time = ',(Time2-Time1)*10,' ms'); e_d:=1; e1_d:=2; GetTime(h,min,sec,sec100); Time1:=h*360000+min*6000+sec*100+sec100; while (e1_d>1) do begin e_d:=e_d/2; e1_d:=1+e_d; end; e_d:=e_d*2; GetTime(h,min,sec,sec100); Time2:=h*360000+min*6000+sec*100+sec100; Writeln('Double: eps= ',e_d,' time = ',(Time2-Time1)*10,' ms'); e_e:=1; e1_e:=2; GetTime(h,min,sec,sec100); Time1:=h*360000+min*6000+sec*100+sec100; while (e1_e>1) do begin e_e:=e_e/2; e1_e:=1+e_e; end; e_e:=e_e*2; GetTime(h,min,sec,sec100); Time2:=h*360000+min*6000+sec*100+sec100; Writeln('Extended: eps= ',e_e,' time = ',(Time2-Time1)*10,' ms'); Readln End. |
05.10.2015, 21:02 | #3 (permalink) |
Новичок
Регистрация: 17.09.2015
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо, большое!
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|