Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Getcurrenttime

Iniciado por rihk_ito, 01 de Abril de 2004, 03:11:30 AM

« anterior - próximo »

rihk_ito

 Hola a todos .... resulta que queria comprobar la velocidad de ejecución de dos funciones iguales... pero en una aplicando recursividad y en la otra Iteraciones... y ver la velocidad de cada una de ell.as pero resulta que me aparece ke se tarda 0.000 milisegunmdos... kisiera saber si es ke me pueden ayudar...

Muhcas Gracias

Rich


long factorialR(int n)
{
   if(!n) return 1;
   return (n*factorialR(n-1));
}

long factorialI(int n)
{
   if(!n) return 1;
   long resultado = 1;
   for(int i=1; i<=n; i++)
       resultado*=i;
   return resultado;
}

void main()
{
   int n = 0;
   double inicio, fin;
   while(true)
   {
       printf("Inserte número a calcular\n");
       scanf("%d",&n);
       if(!n) break;
       inicio = GetCurrentTime()/1000;
       printf("Su factorial es %d\n", factorialR(n));
       fin = GetCurrentTime()/1000;
       printf("Factorial Recursivo tardó : %f\n", fin- inicio);
       inicio = GetCurrentTime()/1000;    
       printf("Su factorial es %d\n", factorialI(n));
       fin = GetCurrentTime()/1000;
       printf("Factorial Iterativo tardó : %f\n", fin - inicio);
   }
}



sés

 Seguramente esos procesos tardan menos de 1 seg (bastante menos), y estás utilizando enteros.

No recuerdo bien, pero supongo que GetCurrentTime() devolverá los milisegundos en un int o long. Luego estás dividiendo entre 1000. Cualquier número menor que 1000, si lo divides por 1000...

Aunque GetCurrentTime() o el resultado de la división fuera real (float o double), se lo estás asignando a una variable entera y perderías los decimales igualmente.

Además de utilizar float o double, te recomiendo usar timeGetTime() (creo que se llamaba así), por que la que usas creo que la resolución que tiene es de 18.2avos de segundo (~54 mseg.), con lo que no vas a medir mucho que se diga.
Soy indeciso... ¿o no?

Zaelsius

 Si sólo ejecutas una vez cada rutina es normal que no puedas medir con exactitud el tiempo. Deberias ejecutar cada función muchas veces(1000,5000....) y hacer la media aritmética.

Además de eso, la función ::GetCurrentTime está obsoleta, debes usar getTickCount() en su lugar. Pero aun  es mejor usar timeGetTime(), consulta la MSDN para seleccionar la resolución máxima del termporizador(1ms), que por defecto es de 5ms.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.