Правило 12 Для экономии времени выполнения вычислительных операций необходимо в арифметических выражениях выделять множители

Правило 11.

Правило 10.

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

Правило 9.

Необходимо учитывать различие в скорости выполнения операций по отношению к различным типам данных для разных ЭВМ (целые, вещественные и комплексные, с обычной и двойной точностью и т.д.).

Правило 8.

Экономии времени на операциях присваивания можно

Правило 7.

Для экономии времени выполнения вычислительных операций необходимо в арифметических выражениях выделять множители.

Правило 6.

При программировании вычислительных операций необходимо учитывать время их выполнения и использовать более быстрые.

Правило 5.

Оптимизация вычислительных операций

Основные арифметические операции располагаются в порядке возрастания времени выполнения следующим образом: (+,-), (*), (/), (**).

Это следует учитывать и использовать более быстрые операции. Из вышесказанного следует, что операция A*A выполняется быстрее, чем A**2, а деление, как правило, гораздо медленнее умножения (почти в 5 раз). Поэтому операция A=B/(C*D*E) лучше, чем операция A=В/С/D/Е.

Например, выражение a:=b*(e+f)-c*(e+f)+d*(e+f); лучше использовать в виде a:=(b+c+d)*(e+f);

добиться записью арифметического выражения без вспомогательных переменных. Например:

t1:=b+c; a:=b+c+d*e;

t2:=d*e;

a:=t1+t2;

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

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

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

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

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;

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

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

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

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

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

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

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

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


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



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