Właśnie napisałem ten krótki program C++, aby zbliżyć rzeczywistą liczbę taktów zegara na sekundę.Dlaczego CLOCKS_PER_SEC nie jest faktyczną liczbą zegarów na sekundę?
#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;
}
Po uruchomieniu programu otrzymuję wynik podobny do tego.
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
Dlaczego nie rzeczywista liczba zegar tyka za drugim meczu z CLOCKS_PER_SEC? Nie są nawet w przybliżeniu równe. Co tu się dzieje?
Pamiętaj, że możesz używać pętli przez mniej niż sekundę. Jeśli wywołasz 'time' i pozostanie 200ms przez następną sekundę, będziesz pętli ~ 200ms. W każdym razie nie jest to prawdopodobnie główny problem. – mfontanini
Dobrze, zdaję sobie sprawę, że to jest powód, dla którego pierwsza iteracja pętli zwraca mniejszy wynik niż kolejne iteracje. Ale moje pytanie dotyczy kolejnych iteracji. Chyba powinienem to wyjaśnić. –
Teraz nadal dostajesz naprzód swój cout w każdej kolejnej iteracji. Zaczekaj, aż zaczniesz na sekundę przed rozpoczęciem pomiaru. – David