エラー、バグ、質問 - ページ 1125

 

おそらく計算ミス (MT93032)

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:

おそらく計算ミス (MT93032)

自分で計算したわけではありませんが、偶数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 32bitを持っています。

 

それでも静音で「カウントが早い」。

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文は test式の中の8バイトの数字が嫌いなのでしょうか?