====== Оптимизация кода программ (Code Tuning) ======
* При умножении и делении на 2,4,8,... пользуйте **shl** и **shr**.
inc(x); {x:=x+1;}
inc(x,N); {x:=x+N;}
x:=x shr 1; {x:=x div 2;}
x:=x shl 1; {x:=x * 2;}
__Примечание:__ **Только для целых чисел!**
* При сравнении вместо
(x >= 'A') and (x <= 'Z')
используйте
x in ['A'..'Z']
(Также можно делать и с числами (точнее байтами), но только от 0 до 255)
IF ch IN ['0'..'9','A'..'Z','a'..'z','_'] THEN ...
лучше заменить на
CASE ch OF
'0'..'9','A'..'Z','a'..'z','_':...;
END;
* При работе с множествами операторы
Include(S, X) и Exclude(S, X)
работают быстрее, чем
S := S + [X] и S := S - [X]
соответственно (где S - множество какого-то типа, а X - элемент множества)
* __Превычисления:__
c := (a + b) * d;
e := g - (a + b);
В этих выражениях 2 раза вычисляется **a+b**, поэтому стоит завести временную переменную,
temp := a + b;
c := temp * d;
e := g - temp;
* Пользуйтесь простыми арифметическими операциями начиная по уровню быстроты:
- присваивание
- сложение,вычитание
- умножение
- деление
- возведение в степень и др.
* Деление заменяй на умножение:
x:=(a+b)/2;
а надоx:=(a+b)*0.5;
* Если X и Y целые, то такой код:round(x/y)
чаще всего заменяется на более быстрый:x div y
* Пишите действительные константы с точкой (10.0 вместо 10). Это предотвращает лишние преобразования.
* Заменяйте тип **real** на тип **single** или **double**.
* **I/O** может быть улучшен, если используются большие буферы (кратные 512 байтам для оптимальных результатов)
----
Но помните,
//"Premature optimization is the root of all evil" (Donald Knuth)//