Fehler, Irrtümer, Fragen - Seite 1125

 

Wahrscheinlich ein Rechenfehler (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
}

Ich habe es nicht selbst berechnet, aber mit geradem i -> j = -1, und dem letzten i=18446744073709551615/*ULONG_MAX */-1-> gerade

 
A100:

Wahrscheinlich ein Rechenfehler (MT\930\32)

Ich habe es nicht selbst berechnet, aber mit geraden i -> j = -1, und das letzte i=18446744073709551615/*ULONG_MAX */-1-> gerade

Ich habe Ihr Skript ausprobiert.

Die Aufhebung erfolgt in einem Moment nach dem Zusammenfügen des Diagramms. Es fühlt sich an, als ob überhaupt keine Kontrolle an die Schleife übergeben wird.

 
Fleder:

Es fühlt sich an, als ob überhaupt keine Kontrolle auf die Schleife übertragen wird.

Das tut es wirklich, aber es ist schnell :)
 
void OnStart()
{
        int j = 1;
        for ( int i = 0; i < INT_MAX; i++ )
                j = -j;
        Print( "j=", j );
}
Es ist viel langsamer...
 
A100:
Das ist es wirklich, aber es ist schnell :)

Wenn ich mich richtig erinnere, beschwerten sich frühere Versionen des Compilers, wenn ich versuchte, die

zu viele Iterationen in der Schleife (LONG_MAX und ULONG_MAX) und jetzt schweigt der Compiler...

Ich habe Version 910 32 bit.

 

Trotzdem ist es leise und "schnell zu zählen":

void OnStart()
{
        int j = 1;
        for ( int i = 0; i < ULONG_MAX; i++ )
                j = -j;
        Print( "j=", j );
Obwohl er eigentlich in eine Endlosschleife fallen sollte.
 

Er flucht dort, wo er nicht fluchen muss, und dort, wo er fluchen muss, schweigt er.

Ihre Manieren!

 
Fleder:

Wenn ich mich richtig erinnere, beschwerten sich frühere Versionen des Compilers, wenn ich versuchte, die

zu viele Iterationen in der Schleife (LONG_MAX und ULONG_MAX), aber der Compiler sagt jetzt nichts mehr...

Im Allgemeinen kann der Compiler die Anzahl der Iterationen nicht kennen.

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:

Im Allgemeinen kann der Compiler die Anzahl der Iterationen nicht kennen

Was wahr ist, ist wahr. Es handelt sich also um einen Laufzeitfehler.
 
Vielleicht mag die for-Anweisung keine 8-Byte-Zahlen in einem getesteten Ausdruck?