Миф о скорости выполнения оператора IF

[Удален]  

Решил проверить скорость выполнения некоторых операций.

Побочный вывод:

Скорость выполнения оператора IF не зависит ни от чего!!


int $time_0=TimeLocal();

double $reg;
for(int $i=100000000;$i>0;$i--){
if(1==1){
if(2==2){
if(3==3){
if(4==4){
if(5==5){
if(6==6){
if(7==7){
if(8==8){
if(9==9){
if(0==0){
$reg=iClose(Symbol(),PERIOD_M15,1);
}}}}}}}}}}
}
Alert(TimeLocal()-$time_0);





int $time_0=TimeLocal();
double $reg;
for(int $i=100000000;$i>0;$i--){
if(1==1 && 2==2 && 3==3 && 4==4 && 5==5 && 6==6 && 7==7 && 8==8 && 9==9 && 0==0){
$reg=iClose(Symbol(),PERIOD_M15,1);
}
}
Alert(TimeLocal()-$time_0);

 

Можете сравнить также с оператором switch, который является аналогом оператора if.

switch(выражение)
  {
   case константа: операторы
   case константа: операторы
     ...
   default: операторы
  }
 

Вообще-то в таких измерениях лучше использовать GetTickCount(), а не TimeLocal()

[Удален]  
Meat писал (а) >>

Вообще-то в таких измерениях лучше использовать GetTickCount(), а не TimeLocal()

Как в одном из любимых мультфильмов.

Удав:

- А в попугаях, я всё таки длиннее.

[Удален]  
autoforex писал (а) >>

Можете сравнить также с оператором switch, который является аналогом оператора if.

switch, является частным случаем оператора if.

[Удален]  

Странно было бы ожидать, что скорость будет разной, ибо конструкции идентичны.

Вот если бы некоторые из условий временами не выполнялись (FALSE), то первая конструкция была бы однозначно быстрее.

 

И желательно отдельно замерить пустой цикл for

И всё же измерение результатов в миллисекундах предпочтительнее измерения оных в секундах

Ну и сами цифры не помешали бы :)


P.S. Точнее не пустой for, а с $reg=iClose(Symbol(),PERIOD_M15,1);

 
Andy_Kon писал (а) >>

switch, является частным случаем оператора if.

Ну да, а я как сказал ... ;)))

[Удален]  

В "слонах" лучше, чем в "попугаях".

1. Кол-во операций (циклов) (там где for) = 100000000.

2. В секундах (у меня) 54.

54/100000000=0,00000054 с/цикл

 
Andy_Kon писал (а) >>

В "слонах" лучше, чем в "попугаях".

1. Кол-во операций (циклов) (там где for) = 100000000.

2. В секундах (у меня) 54.

54/100000000=0,00000054 с/цикл

Есть предположение, что львиная доля этих 54 сек на совести $reg=iClose(Symbol(),PERIOD_M15,1); Если интересуют if'ы, это вклад нужно замерить и вычесть. Вместе с вкладом "невидимых" обслуживающих for операций.


P.S. Если Вы когда-нибудь покупали что-нибудь жидкое в свою тару, то могли наблюдать как сначала взвешивается пустая тара, а затем наполненная. Цикл for в данном случае - тара, а $reg=iClose(Symbol(),PERIOD_M15,1); - предварительно положенный в неё булыжник.

[Удален]  
lna01 писал (а) >>

Есть предположение, что львиная доля этих 54 сек на совести $reg=iClose(Symbol(),PERIOD_M15,1); Если интересуют if'ы, это вклад нужно замерить и вычесть. Вместе с вкладом "невидимых" обслуживающих for операций.


P.S. Если Вы когда-нибудь покупали что-нибудь жидкое в свою тару, то могли наблюдать как сначала взвешивается пустая тара, а затем наполненная. Цикл for в данном случае - тара, а $reg=iClose(Symbol(),PERIOD_M15,1); - предварительно положенный в неё булыжник.

Абсолютно верно. Без "булыжника" всё примерно 1 с.