Правило 14

Особенности оптимизации программ на языке Turbo Pascal

Правило 13.

Правило 12.

Правило 11.

Правило 10.

Правило 9.

Желательно избегать использования смешанной арифметики, так как преобразование типа переменной иногда занимает больше времени, чем сама операция вычисления.

При использовании смешанной арифметики, т.е. выполнение в одном выражении операций с разными типами данных, происходит преобразование типов к наиболее сложному типу. Эти преобразования

также требуют времени на выполнение, поэтому желательно их избегать.

Лучше там, где возможно, уменьшать число обращений к стандартным функциям путем эквивалентных алгебраических преобразований.

Например, конструкцию

if (SQRT(X ** 2 +Y ** 2) < R then

целесообразно заменить на

if ((X * X +Y * Y) < R * R) then,

конструкцию

a:=ln(x)+ln(y);

на

a:=ln(x*y);,

а конструкцию

a:=sqr(i); - на a:=i*i; a a:=sqrt(i)*sqrt(j) на a:=sqrt(i*j).

Там, где это возможно, следует путем равносильных математических преобразований упрощать вычисляемые выражения

1) w1:=exp(sin(i/j*pi/20)+ w1:=abs(sin(i*

cos(pi*(0.5+i/j/20))+ pi/6))+1;

ln(sqrt(sin(i*pi/6)*

*sin(i*pi/6))+1));

2) a:=sin(b*c)*sin(b*c); a:=sqr(sin(b*c));

В данном случае поисходит уменьшение времени вычисления, т.к. значение sin(b*c) вычисляется один раз вместо двух, а затем возводится в квадрат с помощью стандартной функции языка.

Для уменьшения временных затрат на вычисление адресов элементов массивов следует отдавать предпочтение скалярным переменным.

Например

for i:=1 to 5 do for i:=1 to 5 do

for j:=1 to 5 do begin for j:=1 to 5 do begin

s[i,j]:=0; t:=0;

for k:=1 to 100 do for k:=1 to 100 do

s[i,j]:=s[i,j]+ t:=t+a[i,j,k];

a[i,j,k]; s[i,j]:=t;

end; end;

Желательно избегать неоправданного разбиения операции сравнения на несколько компонент.

Очевидно, что (студенческий пимер)

IF (I < 0 or I > 0) then J = J + 2

хуже, чем

IF (I <> 0) then J = j + 2.

Таким образон можно выделить следующие процедуры oптимизации

вычислительных oпeраций:

- исключение смешанной арифметики;

- удаление лишних операторов присваивания:

- замена деления и возведения в степень умножением:

- гриппировка переменник одного чипа:

- уменьшение числа обращений к функциям:

- уменьшение числа обращений к элементам массивов.

Всюду, где возможно, следует использовать ближнюю (Near) адресацию процедур, т.к. это экономит память и повышает быстродействие.

Модель памяти определяет возможность вызова процедуры из раличных частей программы: если используется ближняя модель, вызов возможен только в определенных пределах (64 Кбайт); при дальней модели вызов возможен из любого сегмента. Ближняя модель экономит один байт и несколько микросекунд на каждом вызове процедуры.

Ближняя адресация осуществляется директивой компилятора {$f-} и установлена по умолчанию.

Т.е. сразу за заголовком процедуры или функции желательно использовать стандартную директиву Near.

Например, Function(a,b:real): real; near;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: