pregunta para los expertos en #define - página 9

 
Alexandr Andreev:

Esto no siempre funciona.


Esta no es la prueba correcta porque los cuerpos de los bucles son diferentes.
El segundo cuerpo tiene más instrucciones cnt--
Así que esta no es mi prueba correcta.
Con PI creo que es más correcto.

 
Roman:

Esta no es la prueba correcta porque los cuerpos de los bucles son diferentes.
El segundo cuerpo también tiene instrucciones cnt--
Esta no es mi prueba correcta.
Con PI creo que es más correcto.

es la forma de vida, la prueba es tan correcta como puede ser en términos de uso y sentido común. En cualquier bucle en el que cambiemos el tamaño del propio array, habrá exactamente el mismo código. Este ejemplo da en el clavo.

Pero la IP está ahí y los resultados no son obviamente en un sentido, compruébalo.

 
Alexandr Andreev:

Esto es sólo una forma de vida, una prueba que no es correcta en términos de uso y sentido común.
En cualquier bucle en el que cambiemos el tamaño del propio array, habrá exactamente el mismo código. Este ejemplo da en el clavo.

Pero la IP está ahí y los resultados no son obviamente en una sola dirección.

¿Pero cómo es correcto?
Si hay más instrucciones en el cuerpo del bucle, se ejecuta más código durante la iteración, se incrementa una instrucción extra.
Lo que aumenta el tiempo de ejecución. Es lógico.
Y cuando los cuerpos son los mismos, ya es seguro evaluar la referencia a la condición del bucle.

 
Roman:

¿Cómo es correcto?
Si hay más instrucciones en el cuerpo del bucle, se ejecuta más código durante la iteración, se incrementa una instrucción extra.
Lo que aumenta el tiempo de ejecución. Es lógico.
Y cuando los cuerpos son iguales, ya podemos estimar con seguridad la llamada a la condición del bucle.

))))

No es correcto según todos los cánones. Tiene entre las ejecuciones (ejecutar más a menudo, compilar más ejecuciones - una manera), por lo que la diferencia en el cálculo de una manera es mayor que el valor que está calculando. La diferencia se debe a las tareas actuales del sistema. Es decir, la cuota del valor examinado es demasiado pequeña, para aumentarla hay que aumentar el número de estas funciones en el cuerpo.... y tomar la operación más barata. ¡Y esto es multiplicación!... Todavía no he encontrado otro. Por ejemplo, en mi ejemplo se utiliza una división, que es muchas veces menor que la forma de calcular pi, donde también se utiliza el ghosting de tipo (proceso bastante caro).

 
Alexandr Andreev:

))))

No es correcto por todos los cánones. Usted tiene entre las carreras (ejecutar más a menudo, compilar más carreras - una manera), por lo que tiene una diferencia en el cálculo entre las carreras de una manera más que el valor profesado. La diferencia se debe a las tareas actuales del sistema. Es decir, la cuota del valor examinado es demasiado pequeña, para aumentarla hay que aumentar el número de estas funciones en el cuerpo.... y tomar la operación más barata. ¡Y esto es multiplicación!... Todavía no he encontrado otro. Por ejemplo, mi ejemplo utiliza una división - que es muchas veces menos que la forma de calcular pi, donde también se utiliza el tipo ghosting (proceso bastante caro).

Una vez más. No es el cuerpo del bucle lo que se comprueba, sino la condición del bucle.
Los cuerpos de los bucles deben ser los mismos para medir el cumplimiento de la condición.
De lo contrario, el tiempo de medición será diferente porque los cuerpos se ejecutan con tiempos diferentes.
Lo que tenemos en este caso, ya que hay una instrucción extra cnt--

 
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();
  }

En general, resulta que la alternancia entre el perdón y el desplazamiento binario (que es una de las operaciones más baratas) también afecta al cálculo de.... Bueno, no hay diferencia, ese es el veredicto
 
Roman:

Una vez más. No es el cuerpo del bucle lo que se comprueba, sino la condición del bucle.
Los cuerpos del bucle deben ser los mismos para medir si se cumple la condición.
De lo contrario, el tiempo de medición será diferente porque los cuerpos se ejecutan con tiempos diferentes.
Lo que tenemos en este caso, ya que hay una instrucción extra cnt--

En realidad mi texto era exactamente sobre el camino con pi

 
Me da miedo incluso preguntar por #define
 
Алексей Тарабанов:
Me da miedo incluso preguntar por #define

Hablemos más de la definición.
Según tengo entendido, no da un impulso en tiempo de ejecución en el ejecutable.

 
Roman:

Hablemos más de la definición.
Según tengo entendido, no da un aumento de la ejecución en el archivo ejecutable.

De acuerdo. Primero la definición, luego el ejecutable, luego el ejecutable.