2016-01-27 2 views
1

У меня есть две петли. Я не понимаю, почему первый работает быстрее, чем мой второй. Можете ли вы объяснить как можно проще?Булевое состояние, оцененное внутри для характеристики петли

Первое:

for (int x1=0;x1<1000;x1++){ 
    for(int x2=0;x2<1000;x2++){ 
     if(x1<500){ 
     a[x2+x1*1000]=100; 
     } 
    } 
} 

Второе:

bool cond; 
for (int x1=0; x1<1000; x1++) { 
    cond = x1<500; 
    for(int x2=0; x2<1000; x2++){ 
     if(cond){ 
      a[x2+x1*1000] = 100; 
     } 
    } 
} 

(я упростил свой код)

+3

Насколько медленнее/быстрее? Показать фактические ориентиры. Если разница незначительна, это может быть почти все (в том числе неэффективность, вызванная операционной системой, на которую вы не можете повлиять), и ее можно пренебрегать с чистой совестью. – Downvoter

+1

в моем коде это выражение вызывает% 30 замедление кода –

+2

Показать фактические ориентиры. Но, по общему признанию, это не второстепенно. – Downvoter

ответ

0

Самый простой ответ, когда вы используете

if(x1<500){ 
     a[x2+x1*1000]=100; 
      } 

вы на самом деле используете прямой метод в какие значения сравниваются и работа выполняется, но при использовании

if(cond) { 
    a[x2+x1*1000] = 100; 
     } 

то сначала вычисляет ответ «конд», то применяется, если условие, будучи более специфичным, вы можете просто взять его, как если бы конд вызов функции и если (x1 < 500) является простым сравнением в main(). Надеюсь, вы получили свой ответ, и если вы хотите узнать что-нибудь еще об этой теме, скажите мне :)

Смежные вопросы