오류, 버그, 질문 - 페이지 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 -> even

 
A100 :

아마도 계산 오류 (MT\930\32)

물론 제가 직접 세어보지는 않았지만 i -> j = -1 의 경우에도 마지막 i = 18446744073709551615/* ULONG_MAX */ -1 -> even

나는 당신의 스크립트를 시도했습니다.

차트에 합류하는 순간부터 인쇄가 발생합니다. 제어가 루프에 전혀 전달되지 않는 것처럼 느껴집니다.

 
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비트 버전이 있습니다.

 

그는 다음과 같이 침묵하고 "빨리 계산"합니다.

 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바이트 숫자를 좋아하지 않습니까?