Acabo de escribir este programa corto en C++ para aproximar el número real de tics de reloj por segundo.¿Por qué CLOCKS_PER_SEC no es la cantidad real de relojes por segundo?
#include <iostream>
#include <time.h>
using namespace std;
int main() {
for(int i = 0; i < 10 ; i++) {
int first_clock = clock();
int first_time = time(NULL);
while(time(NULL) <= first_time) {}
int second_time = time(NULL);
int second_clock = clock();
cout << "Actual clocks per second = " << (second_clock - first_clock)/(second_time - first_time) << "\n";
cout << "CLOCKS_PER_SEC = " << CLOCKS_PER_SEC << "\n";
}
return 0;
}
Cuando ejecuto el programa, obtengo una salida que se ve así.
Actual clocks per second = 199139
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 638164
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 610735
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 614835
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 642327
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 562068
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 605767
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 619543
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 650243
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 639128
CLOCKS_PER_SEC = 1000000
¿Por qué el número real de marcas de reloj por segundo no coincide con CLOCKS_PER_SEC? Ni siquiera son aproximadamente iguales. ¿Que está pasando aqui?
Tenga en cuenta que puede bucle durante menos de un segundo. Si llama a 'time', y quedan 200ms para el siguiente segundo, entonces dará un bucle de ~ 200ms. Este probablemente no sea el principal problema aquí, de todos modos. – mfontanini
Correcto, me doy cuenta de que esa es la razón por la cual la primera iteración del ciclo devuelve un resultado más pequeño que las iteraciones subsiguientes. Pero mi pregunta es acerca de las iteraciones posteriores. Creo que debería haber dejado eso en claro. –
Ahora todavía obtiene la sobrecarga de su cout en cada iteración posterior. Espere hasta que esté en el comienzo de un segundo antes de comenzar su medición. – David