program Project1; {$APPTYPE CONSOLE} var C: integer = 4; i: integer; function D(const Count:Integer):Integer; begin result:=Count; writeln( Count); end; function Count: integer; begin result:= C end; begin for i:= 0 to D( Count-1) do begin writeln( 'nn'); c:= 3; end; readln; end.
По-крайней мере так не вычисляется :)
Другое дело, что при варианте когда
var A:Array[0..5]; ... for i:=0 to Length(A) do begin A[i]:=i; end;
компилятор по-идее не должен проверять i на выход за границы массива каждую итерацию.
Поправка - очепятки
Товарищи, фтыкаем
>For purposes of controlling execution of the loop, the expressions initialValue and finalValue are evaluated only once, before the loop begins. Hence the for...to statement is almost, but not quite, equivalent to this while construction
По поводу бенчмарка... раз уж вы занялись оптимизацией кода - учитесь делать её правильно (BDS 2006 ;)
XProger
Ты злобный читер ;) Знаешь же, что Dron не однократно отмазывался, что типа специально написал кривой алгоритм :) Да и не в оптимизации кода дело. Хотелось бы увидеть (одинаковую) реализацию какого-нибудь сложного(O(N^3)) алгоритма, чтобы можно было реально протестировать.
MeF
Бессмысленно тягаться с SSE2... ;)
Программист никогда не должен придумывать кривой алгоритм, т.к. его задача - придумать оптимальный алгоритм решения, а уже затем реализовать его на языке программирования. Следовательно, ищем причину всех бед и тормозов в себе ;)
Тема в архиве.