Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: leophysicist1987 en 11 Febrero 2012, 00:57 am



Título: Como cronometrar un programa hecho en C
Publicado por: leophysicist1987 en 11 Febrero 2012, 00:57 am
¡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:


Título: Re: Como cronometrar un programa hecho en C
Publicado por: leophysicist1987 en 11 Febrero 2012, 01:09 am
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!


Título: Re: Como cronometrar un programa hecho en C
Publicado por: soyloqbuskas en 20 Febrero 2012, 02:11 am
¡Buenas leophysicist1987!

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

Esta linea debes escribirla asi:
Código
  1. duracion = (double)tf - (double)- ti / CLOCKS_PER_SEC;

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

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.


Título: Re: Como cronometrar un programa hecho en C
Publicado por: Anastacio en 20 Febrero 2012, 18:52 pm
Una preguntita. Eso mediria en segundos, microsegundos, nanosegundos, como mediria?


Título: Re: Como cronometrar un programa hecho en C
Publicado por: Xandrete en 21 Febrero 2012, 22:24 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.

¡Buenas leophysicist1987!

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

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

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.


Título: Re: Como cronometrar un programa hecho en C
Publicado por: rir3760 en 22 Febrero 2012, 03:00 am
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
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:
Código
  1. duracion = ((double) tf - ti) / CLOCKS_PER_SEC;

Un saludo