Frage an #define-Experten - Seite 9

 
Alexandr Andreev:

Das funktioniert nicht immer.


Dies ist nicht der richtige Test, da die Schleifenkörper unterschiedlich sind.
Die zweite Stelle hat mehr Anweisungen cnt--
Dies ist also nicht mein richtiger Test.
Bei PI ist es meiner Meinung nach korrekter.

 
Roman:

Dies ist nicht der richtige Test, da die Schleifenkörper unterschiedlich sind.
Die zweite Stelle hat auch Anweisungen cnt--
Dies ist nicht mein richtiger Test.
Bei PI ist es meiner Meinung nach korrekter.

So ist das eben im Leben, der Test ist so korrekt wie nur möglich, was den Gebrauch und den gesunden Menschenverstand angeht. In jeder Schleife, in der wir die Größe des Arrays selbst ändern, wird genau derselbe Code verwendet. Dieses Beispiel trifft genau ins Schwarze.

Aber die PI ist da und die Ergebnisse sind nicht offensichtlich einseitig, schau es dir an.

 
Alexandr Andreev:

Dies ist nur eine Lebensweise, ein Test, der nicht korrekt ist, was den Gebrauch und den gesunden Menschenverstand angeht.
In jeder Schleife, in der wir die Größe des Arrays selbst ändern, wird genau derselbe Code verwendet. Dieses Beispiel trifft genau ins Schwarze.

Aber die PI ist da und die Ergebnisse sind nicht eindeutig in eine Richtung.

Aber wie ist das richtig?
Wenn sich mehr Anweisungen im Schleifenkörper befinden, wird während der Iteration mehr Code ausgeführt, eine zusätzliche Anweisung wird inkrementiert.
Dadurch erhöht sich die Ausführungszeit. Das ist logisch.
Und wenn die Körper identisch sind, ist es bereits sicher, den Verweis auf die Schleifenbedingung auszuwerten.

 
Roman:

Wie ist das richtig?
Wenn sich mehr Anweisungen im Schleifenkörper befinden, wird während der Iteration mehr Code ausgeführt, eine zusätzliche Anweisung wird inkrementiert.
Dadurch erhöht sich die Ausführungszeit. Das ist logisch.
Und wenn die Körper identisch sind, können wir den Aufruf der Schleifenbedingung bereits sicher abschätzen.

))))

Sie ist nicht nach allen Regeln der Kunst korrekt. Sie haben zwischen den Läufen (öfter laufen, mehr Läufe kompilieren - eine Möglichkeit), so dass der Unterschied in der Berechnung einer Möglichkeit größer ist als der Wert, den Sie berechnen. Der Unterschied ergibt sich aus den aktuellen Aufgaben des Systems. D.h. der Anteil des untersuchten Wertes ist zu gering, um ihn zu erhöhen, müssen Sie die Anzahl dieser Funktionen im Körper erhöhen.... und nehmen Sie die billigste Operation. Und das ist die Multiplikation!... Ich habe noch keine andere gefunden. In meinem Beispiel wird beispielsweise eine Division verwendet - das ist ein Vielfaches weniger als bei der Berechnung von Pi, bei der auch Geisterbilder verwendet werden (ein recht teurer Prozess).

 
Alexandr Andreev:

))))

Sie ist nicht nach allen Regeln der Kunst korrekt. Sie haben zwischen den Läufen (mehr Läufe machen, mehr Läufe kompilieren - ein Weg), so dass Sie einen Unterschied in der Berechnung zwischen den Läufen von einem Weg mehr als der Wert erklärt. Der Unterschied ergibt sich aus den aktuellen Aufgaben des Systems. D.h. der Anteil des untersuchten Wertes ist zu gering, um ihn zu erhöhen, müssen Sie die Anzahl dieser Funktionen im Körper erhöhen.... und nehmen Sie die billigste Operation. Und das ist die Multiplikation!... Ich habe noch keine andere gefunden. In meinem Beispiel wird zum Beispiel eine Division verwendet - das ist ein Vielfaches weniger als die Art und Weise, wie Pi berechnet wird, bei der auch Geisterbilder verwendet werden (ein ziemlich teurer Prozess).

Noch einmal. Es wird nicht der Schleifenkörper, sondern die Schleifenbedingung getestet.
Die Körper der Schleifen müssen gleich sein, um zu messen, ob die Bedingung erfüllt ist oder nicht.
Andernfalls wird die Messzeit unterschiedlich sein, da die Körper mit unterschiedlichen Zeiten ausgeführt werden.
Was wir in diesem Fall haben, da es eine zusätzliche Anweisung cnt gibt.

 
void OnStart()
  {
   int mas[];
   int mas1[300];
   int mas2[300];
   int mas3[300];
   int mas4[300];
   int mas5[300];
   int mas6[300];
   int z=300;
   int size=1000000000;
   ArrayResize(mas,size);
   int r=0;
   int r1=0;
   int r2=0;
   int random;
   ulong max=100; 
   int t=0;
   int tr=0; 
   MathSrand(10);
    int num_steps=ArraySize(mas);
    double x, pi, sum=0.0;
    double step = 1.0/(double)num_steps;
    
     int v=size;
    ulong t1 = GetMicrosecondCount();
     
    
  // for(ulong z=0; z<max; z++)
     {
      for(int i=0; i<ArraySize(mas); i++)
        {  
        r2+=ArraySize(mas);
        r2<<=3;
        }

     }  
   ulong t2=GetMicrosecondCount();
   //for(ulong z=0; z<max; z++)
   int sizem=ArraySize(mas);
     {
      for(int i=0; i<sizem; i++)
        { 
        r2+=sizem;
        r2<<=3;
        
        }
     }
    
   ulong t3=GetMicrosecondCount();
   Print(t2-t1,"  ",t3-t2," ",r2," ",r1);
// Templ();
  }

Im Allgemeinen zeigt sich, dass der Wechsel zwischen Vergebung und binärer Verschiebung (eine der billigsten Operationen) auch die Berechnung von.... beeinflusst. Nun, es gibt keinen Unterschied, so lautet das Urteil
 
Roman:

Noch einmal. Es wird nicht der Schleifenkörper, sondern die Schleifenbedingung getestet.
Die Schleifenkörper müssen identisch sein, um zu messen, ob die Bedingung erfüllt ist.
Andernfalls wird die Messzeit unterschiedlich sein, da die Körper mit unterschiedlichen Zeiten ausgeführt werden.
Was wir in diesem Fall haben, da es eine zusätzliche Anweisung cnt gibt.

Eigentlich war mein Text genau auf den Weg mit pi

 
Ich habe Angst, nach #define zu fragen.
 
Алексей Тарабанов:
Ich habe Angst, nach #define zu fragen.

Lassen Sie uns mehr über die Definition sprechen.
So wie ich es verstehe, wird die Laufzeit der ausführbaren Datei nicht verlängert.

 
Roman:

Lassen Sie uns mehr über die Definition sprechen.
Soweit ich weiß, wird die Ausführung in der ausführbaren Datei dadurch nicht erhöht.

Ja. Erst die Definition, dann die ausführbare Datei, dann die ausführbare Datei.