IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Тест скорости обработки разных типов данных., Тест на Гормоническом ряде .
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик

Репутация: -  0  +


Вот написал как-то я такой тестик .
Результатом работы будет файл с подробным описанием тестов и временем их исполнения в Сотых Долях Секунды.

Код

program Big_experiment;
{$N+}
uses crt, dos;
var resSingle : single;
   resDouble : double;
   resReal : real;
   resExtended : extended;
   n : longint;
   h , h1 , m , m1, s, s1 , hd , hd1 :extended;
   hw , h1w , mw , m1w, sw, s1w , hdw , hd1w :word;


{---}
function CalcTime:extended;
var res : extended;
begin
  res := 0;
  res := abs( (hd-hd1) + ((s*100)-(s1*100)) + ((m*6000)-(m1*6000)) + ((h*360000)-(h1*360000)));
  calctime := res;
end;
{---}
procedure exp(flag :byte;direction :boolean); {direction : true - left to right; false right to left}
var i  : longint;
   t : extended;
begin


  i := 1;
  repeat
     t:=(i*2)-1;
     if not(direction) then t := (n+1-t)*2-1;
     case flag of
        1 : resSingle := resSingle + 1 /(t*t);
        2 : resDouble := resDouble + 1 / (t*t);
        3 : resReal := resReal + 1 / (t*t);
        4 : resExtended := resExtended + 1 / (t*t);
     end;
     inc(i);
  until (i=n);


end;
{---}
{---}
var f : text;
  i : longint;
  nam : array[1..4] of string;

begin
  resSingle := 0;
  resDouble := 0;
  resReal := 0;
  resExtended :=0;
  nam[1] := 'Single';
  nam[2] := 'Double';
  nam[3] := 'Real';
  nam[4] := 'Extended';

  assign(f,'big_res.txt');
  rewrite(f);

  clrscr;

  n := 1000;
  repeat
     for i := 1 to 4 do begin
        writeln(f,nam[i] , '  n=',n);

        gettime(hw,mw,sw,hdw);
        h := hw; m := mw; s := sw; hd := hdw;

        exp(i,true);

        gettime(h1w,m1w,s1w,hd1w);
        h1 := h1w; m1 := m1w; s1 := s1w; hd1 := hd1w;
        case i of
           1 : writeln(f,'Left to right :',resSingle, ' with  ',CalcTime:2:0,' ss');
           2 : writeln(f,'Left to right :',resDouble, ' with  ',CalcTime:2:0,' ss');
           3 : writeln(f,'Left to right :',resReal, ' with  ',CalcTime:2:0,' ss');
           4 : writeln(f,'Left to right :',resExtended, ' with  ',CalcTime:2:0,' ss');
        end;

        writeln(nam[i] , '  ',CalcTime :2:0,' ss ');

        resSingle := 0;
        resDouble := 0;
        resReal := 0;
        resExtended :=0;

        gettime(hw,mw,sw,hdw);
        h := hw; m := mw; s := sw; hd := hdw;

        exp(i,false);

        gettime(h1w,m1w,s1w,hd1w);
        h1 := h1w; m1 := m1w; s1 := s1w; hd1 := hd1w;
        case i of
           1 : writeln(f,'Right to left',resSingle,' with ',CalcTime:2:0,' ss');
           2 : writeln(f,'Right to left',resDouble,' with ',CalcTime:2:0,' ss');
           3 : writeln(f,'Right to left',resReal,' with ',CalcTime:2:0,' ss');
           4 : writeln(f,'Right to left',resExtended,' with ',CalcTime:2:0,' ss');
        end;
        writeln(f,'Pi^2 / 8        :' , (pi*pi)/8);
        writeln(f);

        writeln(nam[i] , '  ',CalcTime :2:0,' ss ');
     end;
     writeln(n);
     n := n * 10;
  until (n= 1000000000);

  writeln;
  writeln('Detailed results was saved in BIG_RES.txt  . Thank you for using my test. (ss = sec/100)');
  readkey;
  close(f);
end.


Призываю всех отказаться от использования типа REAL , в связи с тем , что он примерно в 2 раза медленее остальных !

Сообщение отредактировано: SHnur -


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






SHnur
А почему
Цитата
он примерно в 2 раза медленее остальных
знаешь? Дело все в том, что Real - это чуждый сопроцессору тип, и время, "съедаемое" преобразованием его в сопроцессорный тип, перекрывает ускорение (не добавляя при этом точности)... Вместо него лучше использовать Double...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик

Репутация: -  0  +


volvo , да , на сколько я знаю тип REAL приходится преобразоовать в тип EXTENDED и самое страшное (в смысле затрат времени) в разнице машинного представления этих двух типов в Паскале /

Real (6 байтов)
1-знаковый бит ,39 -битов Мантиссы ,8-битов порядка
Extended (10 байтов)
1 - знаковый бит , 15-битов порядка,1-постоянный бит,63 бита мантиссы

так вот основная затрата времени при преоюразовании REAL -> Extended приходится на перемещение битов мантиссы (так как порядок их расположения разный )


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик

Репутация: -  0  +


Да , к стати эта прога показывает , что порядок вычисления имеет большое значение . Так в некоторых случаях вачисление (гормонического ряда) "с прва на лево" быстрее чем "с лева на право" .


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






SHnur
Цитата
на сколько я знаю тип REAL приходится преобразоовать в тип EXTENDED
Неправда. Real преобразуется в Double, как больший по размеру (6 байт -> 8 байт)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик

Репутация: -  0  +


Как учили меня , все типы подгоняются под EXTENDED .
Хотя , возможно те , кто меня учил , ошибались или я что-то перепутал ;)


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.09.2025 20:34
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name