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

 

Вероятно ошибка вычислений (MT\930\32)

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

Сам то я конечно не считал, но при четных i -> j = -1, а последнее i=18446744073709551615/*ULONG_MAX */-1 -> четное 

 
A100:

Вероятно ошибка вычислений (MT\930\32)

Сам то я конечно не считал, но при четных i -> j = -1, а последнее i=18446744073709551615/*ULONG_MAX */-1 -> четное 

Попробовал Ваш скрипт.

Распринтовка происходит через мгновение от присоединения к графику. Такое чувство, что в цикл управление вообще не передаётся. 

 
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-байтные числа?
Причина обращения: