Errori, bug, domande - pagina 1125

 

Probabilmente un errore di calcolo (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
}

Non l'ho calcolato io stesso, ma con i pari -> j = -1, e l'ultimo i=18446744073709551615/*ULONG_MAX */-1-> pari

 
A100:

Probabilmente un errore di calcolo (MT\930\32)

Non l'ho calcolato io stesso, ma con i pari -> j = -1, e l'ultimo i=18446744073709551615/*ULONG_MAX */-1-> pari

Ho provato il tuo script.

Il disinserimento avviene in un momento dall'unione del grafico. Sembra che non venga passato alcun controllo al ciclo.

 
Fleder:

È come se non venisse trasferito alcun controllo al ciclo.

Lo fa davvero, ma è veloce :)
 
void OnStart()
{
        int j = 1;
        for ( int i = 0; i < INT_MAX; i++ )
                j = -j;
        Print( "j=", j );
}
È molto più lento...
 
A100:
Lo è davvero, ma è veloce :)

Se ricordo bene, le versioni precedenti del compilatore si lamentavano quando cercavo di impostare

troppe iterazioni nel ciclo (LONG_MAX e ULONG_MAX) e ora il compilatore tace...

Ho la versione 910 32 bit.

 

È silenzioso e "veloce da contare" anche così:

void OnStart()
{
        int j = 1;
        for ( int i = 0; i < ULONG_MAX; i++ )
                j = -j;
        Print( "j=", j );
Anche se, presumibilmente, dovrebbe cadere in un loop infinito.
 

Impreca dove non c'è bisogno di imprecare, e dove c'è bisogno di imprecare, tace.

Le loro maniere!

 
Fleder:

Se ricordo bene, le versioni precedenti del compilatore si lamentavano quando cercavo di impostare

troppe iterazioni nel ciclo (LONG_MAX e ULONG_MAX), ma il compilatore non dirà una parola ora...

In generale, il compilatore non può conoscere il numero di iterazioni.

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:

In generale, il compilatore non può conoscere il numero di iterazioni

Ciò che è vero è vero. Quindi è un errore di runtime.
 
Forse all'istruzione for non piacciono i numeri a 8 byte in un'espressione testata?