Me gustaría saber qué líneas de código C agregar a un programa para que me diga el tiempo total que tarda el programa en ejecutarse. Supongo que debería haber inicialización de contador cerca del principio de main y una después de que la función principal termine. ¿Es el encabezado correcto clock.h
?Tiempo transcurrido de ejecución de un programa en C
Muchas gracias ...
Actualizar que tienen una máquina de Windows XP. ¿Está simplemente agregando clock()
al principio y otro clock()
al final del programa? Entonces puedo estimar la diferencia de tiempo. Sí, tienes razón, es time.h
.
Aquí está mi código:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <share.h>
#include <time.h>
void f(long double fb[], long double fA, long double fB);
int main() {
clock_t start, end;
start = clock();
const int ARRAY_SIZE = 11;
long double* z = (long double*) malloc(sizeof (long double) * ARRAY_SIZE);
int i;
long double A, B;
if (z == NULL) {
printf("Out of memory\n");
exit(-1);
}
A = 0.5;
B = 2;
for (i = 0; i < ARRAY_SIZE; i++) {
z[i] = 0;
}
z[1] = 5;
f(z, A, B);
for (i = 0; i < ARRAY_SIZE; i++)
printf("z is %.16Le\n", z[i]);
free(z);
z = NULL;
end = clock();
printf("Took %ld ticks\n", end-start);
printf("Took %f seconds\n", (double)(end-start)/CLOCKS_PER_SEC);
return 0;
}
void f(long double fb[], long double fA, long double fB) {
fb[0] = fb[1]* fA;
fb[1] = fb[1] - 1;
return;
}
Algunos errores con MVS2008:
testim.c(16) : error C2143: syntax error : missing ';' before 'const' testim.c(18) :error C2143: syntax error : missing ';' before 'type' testim.c(20) :error C2143: syntax error : missing ';' before 'type' testim.c(21) :error C2143: syntax error : missing ';' before 'type' testim.c(23) :error C2065: 'z' : undeclared identifier testim.c(23) :warning C4047: '==' : 'int' differs in levels of indirection from 'void *' testim.c(28) : error C2065: 'A' : undeclared identifier testim.c(28) : warning C4244: '=' : conversion from 'double' to 'int', possible loss of data
y se dirige a 28 errores. Tenga en cuenta que no tengo ningún error/advertencia sin sus códigos de reloj.
ÚLTIMAS NOTICIAS: Desafortunadamente no recibí una buena respuesta aquí. Pero después de una búsqueda en Google, el código está funcionando. Aquí está:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void f(long double fb[], long double fA);
int main() {
clock_t start = clock();
const int ARRAY_SIZE = 11;
long double* z = (long double*) malloc(sizeof (long double) * ARRAY_SIZE);
int i;
long double A;
if (z == NULL) {
printf("Out of memory\n");
exit(-1);
}
A = 0.5;
for (i = 0; i < ARRAY_SIZE; i++) {
z[i] = 0;
}
z[1] = 5;
f(z, A);
for (i = 0; i < ARRAY_SIZE; i++)
printf("z is %.16Le\n", z[i]);
free(z);
z = NULL;
printf("Took %f seconds\n", ((double)clock()-start)/CLOCKS_PER_SEC);
return 0;
}
void f(long double fb[], long double fA) {
fb[0] = fb[1]* fA;
fb[1] = fb[1] - 1;
return;
}
Saludos
actualización el 10 de abril: Aquí hay una solución mejor gracias a "JustJeff"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
void f(long double fb[], long double fA);
const int ARRAY_SIZE = 11;
int main(void)
{
long double* z = (long double*) malloc(sizeof (long double) * ARRAY_SIZE);
int i;
long double A;
LARGE_INTEGER freq;
LARGE_INTEGER t0, tF, tDiff;
double elapsedTime;
double resolution;
if (z == NULL) {
printf("Out of memory\n");
exit(-1);
}
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&t0);
// code to be timed goes HERE
{
A = 0.5;
for (i = 0; i < ARRAY_SIZE; i++) {
z[i] = 0;
}
z[1] = 5;
f(z, A);
for (i = 0; i < ARRAY_SIZE; i++)
printf("z is %.16Le\n", z[i]);
free(z);
z = NULL;
}
QueryPerformanceCounter(&tF);
tDiff.QuadPart = tF.QuadPart - t0.QuadPart;
elapsedTime = tDiff.QuadPart/(double) freq.QuadPart;
resolution = 1.0/(double) freq.QuadPart;
printf("Your performance counter ticks %I64u times per second\n", freq.QuadPart);
printf("Resolution is %lf nanoseconds\n", resolution*1e9);
printf("Code under test took %lf sec\n", elapsedTime);
return 0;
}
void f(long double fb[], long double fA) {
fb[0] = fb[1]* fA;
fb[1] = fb[1] - 1;
return;
}
Funciona tanto con MVS2008 y con Borland C++ BuilderX de 2003.
Puede publicar una respuesta y aceptarla si cree que ahora tiene la mejor respuesta usted mismo. Hacerlo puede ser útil para otra persona que busca una respuesta a la pregunta en cuestión (y estoy seguro de que otras personas buscan esto todo el tiempo). – Cam
No sé si tengo la respuesta correcta. Pero está funcionando. Siempre recibo sugerencias constructivas ya que todavía estoy aprendiendo. ¿Puedo aceptar (marcar) mi propia respuesta? – yCalleecharan
Sí, puedes. Y, por cierto, no quiero ser grosero, pero ¿cómo no obtuviste una buena respuesta aquí? Tienes un par de buenas respuestas que deberían funcionar. Si obtiene errores, ese es su propio código, no lo que los contestadores le dieron. Si no cree que las respuestas que recibió son buenas, por favor dígale cómo podemos mejorarlas. – Javier