Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2014-06-19 09:15:20 ЛС | профиль | цитата
Есть (точнее, было выработано при вышеупомянутом обсуждении с Dilma) очень практическое соображение: "А ну его нафиг!!!"

Не надо быть святее Папы Римского.
Ну типа помочь пользователю - это одно. А думать за него - это другое.
Скажем, корни фильтра Баттерворта равномерно расположены на круге. Коэффициенты фильтрации, соответственно, определяются косинусами каких-то очень простых константных выражений.
Посчитать их в Compile-Time - это помощь.

А думать за кого-то (раскрывать скобки, выделять общие подвыражения) -- бесперспективное занятие.
Тут два философских варианта:
   Либо - все равно не поможет (вариант тупого юзера).
   Либо - не факт, что ты умнее Автора (вариант умного юзера).
------------ Дoбавленo в 08.21:


2Assasin,
1) Варнинг на 557-й можно убрать примерно так:
#pas
else{CmdXor:} b := (x1 <> 0) xor (x2 <> 0);
2) Варнинг на 1355-й... Да перенеси ты cnt := 0;, вообще, выше CASE. Хай гнида подавится...

3) Внимание, 1334: 26, 30:, это вам не 26..30:. Тем более, что при "вычислении" - второй вариант остался

------------ Дoбавленo в 09.15:
А вообще-то, функции min/max с одним аргументом -- смотрятся немного странно. Хотя и работают.
Предлагаю сделать "вклейку":
#pas
......
31, 32:
begin
if Token<>',' then
{$ifdef F_P} begin Err:=0; exit; end;
{$else} raise Exception.Create(e_Custom,''); {$endif}
while Token=',' do begin
GetToken; Level1a; {$ifdef F_P} if Err>=0 then exit; {$endif}
inc(cnt);
end;
end;
......
И после этого, заменить кошмарное условие:
#pas
if (i = 31) or (i = 32) then begin
FProgram.WriteInteger(cnt);
end;
на более простое:
#pas
if (cnt>0) then FProgram.WriteInteger(cnt);
карма: 9

1
Голосовали:Леонид