Вверх ↑
Ответов: 16884
Рейтинг: 1239
#1: 2011-09-11 19:05:57 ЛС | профиль | цитата
Леонид,
оптимизация в Delphi писал(а):
Не используйте конструкции типа a:=10*sin(45*pi/180); Delphi не вычислит эту константу на этапе компиляции, напротив, будет послушно вызывать sin и pi по ходу выполнения программы! В случае, если угол является переменной, по крайней мере pi желательно заменить константой 3,1415...

Delphi прекрасно справляется с выражениями, полностью составленных из констант – они вычисляются на этапе компиляции.

В Вашем случае объявление константой выражения PI/44100, вычислит его при компиляции и дальше будет подставлять в коды уже готовое 7,12358276e-5
Если бы Ваша формула имела вид
_Freq1 := (toInteger(_Data) * PI) / 44100;, то я бы просто посоветовал изменить
_Freq1 := (toInteger(_Data) * 3.1415) / 44100;
В данной схеме ускорение работы программы не нужно, но если где-то в цикле, то можно выиграть даже очень неплохо.

------------ Дoбавленo в 18.46:
Это не ошибка, просто "птичку жалко".
------------ Дoбавленo в 18.56:
Ещё одно
оптимизация в Delphi писал(а):
Наиболее распространенный недочет – условие цикла записывается как:
for i:=0 to count – 1 do...

Delphi будет при каждой итерации вызывать метод count, вычитать из результата 1 и потом уже сверять. Настоятельно рекомендуется переписывать подобный код как

lin := count – 1;
for i:=0 to lin do...

------------ Дoбавленo в 19.05:
Аккумуляторов пока нет
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0