Ошибки, баги, вопросы - страница 1125

 
Fleder:

Такое чувство, что в цикл управление вообще не передаётся. 

Так на самом деле и есть, зато быстро :)
 
void OnStart()
{
        int j = 1;
        for ( int i = 0; i < INT_MAX; i++ )
                j = -j;
        Print( "j=", j );
}
А так намного медленнее...
 
A100:
Так на самом деле и есть, зато быстро :)

Если мне не изменяет память, то предыдущие версии компилятора "ругались" на попытку задать

слишком большое число итераций в цикле (LONG_MAX и ULONG_MAX), а теперь компилятор молчит...

У меня версия 910 32 bit. 

 

Молчит и "быстро считает" даже так:

void OnStart()
{
        int j = 1;
        for ( int i = 0; i < ULONG_MAX; i++ )
                j = -j;
        Print( "j=", j );
Хотя, по идее, должен бы впасть в бесконечный цикл.
 

Где не надо ругается, а где надо поругаться - молчит.

Их нравы! 

 
Fleder:

Если мне не изменяет память, то предыдущие версии компилятора "ругались" на попытку задать

слишком большое число итераций в цикле (LONG_MAX и ULONG_MAX), а теперь компилятор молчит...

В общем случае компилятор не может знать число итераций.

int f( ulong max )
{
        int j = 1;
        for ( ulong i = 0; i < max; i += ULONG_MAX )
                j = 0;
        return ( j );
}
void OnStart()
{
        ulong max = ULONG_MAX;
        Print( "j=", f( max )); //результат j=1, а должно быть j=0
}
 
A100:

В общем случае компилятор не может знать число итераций

Что верно -то верно. Значит это ошибка выполнения.
 
Может быть оператор for не любит в проверяемом выражении 8-байтные числа?
 

Я пишу ТЗ для советника на MT4 с приоритетом на ускоренную обработку данных.

Прошу Вас подсказать, имеет ли значение для ускорение работы последовательность выполнения расчета или  выборочное (как правильно называется - репрезентативное?).

Прикладываю два варианта в виде картинок, на которых отображены блок схемы.

Если можно, то напишите как должен выглядеть код, если выборочное исполнение блоков будет происходить - чисто примитивный макет, и даст ли это существенный прирост скорости!? 

Файлы:
Logic_V_01.png  26 kb
Logic_V_02.png  30 kb
 
void OnStart()
{
        uchar max=0;
        for(int t=0;t<LONG_MAX;t++)   {max++;}    //так получаем предупреждение expression is always true, цикл работает
        for(int t=0;t<LONG_MAX+1;t++) {max++;}    //так предупреждение есть, но цикл не работает
        for(int t=0;t<ULONG_MAX;t++)  {max++;}    //так нет предупреждения и цикл не пашет
        Print("Done!");
}