Como cronometrar un programa hecho en C

Iniciado por leophysicist1987, 11 Febrero 2012, 00:57 AM

0 Miembros y 1 Visitante están viendo este tema.

leophysicist1987

¡Saludos! Hace unos días en la Universidad, el profesor que imparte el curso de programación dejó una tarea en la cual por medio del uso de clock() y CLOCKS_PER_SEC tengo que hacer un programa que cronometre el tiempo de precisión en que la función pow() obtiene el resultado final deseado. El programa también me permite como evaluar un polinomio pero eso ya mas o menos lo estoy entendiendo. Si me resuelven mi duda, se los agradecería.

:huh:  :huh:  :huh:

leophysicist1987

Se me había plantear mi duda  :rolleyes: y enseñarles el código fuente. Bueno la duda es que no sé como hago lo de la cronometración. Este es el código fuente

/* Este programa evalúa un polinomio
y cronometra la función pow */

#include <stdio.h>
#include <math.h>
#include <time.h>

float pol( float z);

void main()
{
  clock_t ti, tf;
  double duracion;
  float u, z;
   
 
  ti = clock();
   
  for( z = -100000; z<=100000; z++ ){
  u = pol( z );
  printf( "%f/t%f\n ", z, u);
  }

  tf = clock();
 
  duracion = ((double)(tf - ti)) / CLOCKS_PER_SEC;
  printf( "%f\n", duracion );
 
 


}

float pol( float z)
{
  float u1;
 
  u1 = pow(z,5) + 3*pow(z,3) + 6*pow(z,2) + 4;
 
  return u1;
}

En este programa quiero evaluar el polinomio de grado 5 y que ese mismo programa calcule el tiempo que pow tarda en obtener los resultados. Sólo explíquenme que es lo que falta ¡por favor!

soyloqbuskas

#2
¡Buenas leophysicist1987!

Tu problema esta en la siguiten linea:
Citarduracion = ((double)(tf - ti)) / CLOCKS_PER_SEC;

Esta linea debes escribirla asi:
Código (c_mac) [Seleccionar]
duracion = (double)tf - (double)- ti / CLOCKS_PER_SEC;

Ademas el compilador me ha dado un Warning en tu declaracion del main. Deberias escribirlo asi:
int main(){
   //el codigo del programa
   return 0;
}


y ponte un getchar() antes del return, si no se te cerrar el programa en cuanto acabes y no podras ver el resultado de la ejecucion.

Un saludo.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

Anastacio

Una preguntita. Eso mediria en segundos, microsegundos, nanosegundos, como mediria?
You, stop to close my post, you were novice too!!!!!!!!!!!!

Xandrete

Cita de: Anastacio en 20 Febrero 2012, 18:52 PM
Una preguntita. Eso mediria en segundos, microsegundos, nanosegundos, como mediria?

CLOCKS_PER_SEC => interrupciones de reloj por segundo. Id est, medirá en segundos si no haces ninguna transformación previa.

Cita de: soyloqbuskas en 20 Febrero 2012, 02:11 AM
¡Buenas leophysicist1987!

Tu problema esta en la siguiten linea:
Esta linea debes escribirla asi:
Código (c_mac) [Seleccionar]
duracion = (double)tf - (double)- ti / CLOCKS_PER_SEC;

Ademas el compilador me ha dado un Warning en tu declaracion del main. Deberias escribirlo asi:
int main(){
    //el codigo del programa
    return 0;
}


y ponte un getchar() antes del return, si no se te cerrar el programa en cuanto acabes y no podras ver el resultado de la ejecucion.

Un saludo.

Sólo quería decir que te falta un par de paréntesis y que se te coló un - en la asignación de duracion. Has puesto:  duracion = (double)tf - (double)- ti / CLOCKS_PER_SEC; y sería: duracion = ((double)tf - (double)ti)/ CLOCKS_PER_SEC

Saludos.

rir3760

Cita de: Xandrete en 21 Febrero 2012, 22:24 PMSólo quería decir que te falta un par de paréntesis y que se te coló un - en la asignación de duracion. Has puesto:  duracion = (double)tf - (double)- ti / CLOCKS_PER_SEC; y sería: duracion = ((double)tf - (double)ti)/ CLOCKS_PER_SEC
Se puede reducir un poco mas. Al convertir explícitamente uno de los operandos de la resta al tipo "double" el otro debe ser del (o se convertirá al) mismo tipo. Eso también sucederá con la división.

Al final queda:
duracion = ((double) tf - ti) / CLOCKS_PER_SEC;

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language