Demonios: clock()

jose
17 de Noviembre del 2005
Hola,

me encantaria saber el motivo por el cual me imprime a veces 0.0100000 y a veces 0.00000000.

Aunke la autentika pregunta es como puedo resolverlo para que me imprima cosas como 0.01234567 o 0.00012349.

Un saludo y gracias.

Os adjunto ejemplo:

int main(){
const int n=1000;
float A[n-1];
int max= 0;
int i= 1;
clock_t ini, fin; // declaro los clock_t
srand(time(NULL));

// Bucle para guardar datos en el array
for (i=0; i<n; i++){
A[i]=(float)rand()/RAND_MAX;
}
// Buscamos maximo

ini = clock(); // [b]incializamos rand[/b]

//Comienza el bucle de max
for (i=1; i<n; i++) {
if (A[i]>A[max])
max= i;
}

fin = clock(); // [b]Stop time[/b]

//Imprimimos tiempo y posiciones
printf( "nTime: %f sn", (fin-ini)/(double)CLOCKS_PER_SEC );
cout << "n";
return 0;
}


kike
17 de Noviembre del 2005
Tu codigo es correcto a excepcion de
printf( "nTime: %f sn", (fin-ini)/(double)CLOCKS_PER_SEC );
cambialo por
printf( "nTime: %f sn", (double)(fin-ini)/CLOCKS_PER_SEC );

Pero aun asi no lograras el resultado que buscas, el problema esta en tu procesador, es demasiado rapido, he probado el codigo con un pentium V a 3Ghz y llega a la asigancion de ini en 62 tics, realiza el bucle y cuando carga fin continua en el tic 62, con lo que la diferencia es 0.
En mi maquina la global CLOCKS_PER_SEC tiene un valor de 1000, es decir un tic cada milisegundo, y resulta que realiza el bucle en menos de un milisegundo.
Puedes comprobar esto anidando un par de bucles, de unas 100 vueltas, que no hagan nada y comprobaras como el resultado ahora si es apreciable.
Un saludo..........