Witam,
mam małe pytanie, czy ten kod jest poprawny i poprawnie pokazuje czas wykonania funkcji pod linuxem, bo cały czas dostaję 0ns?
Chodzi mi o czas z dokładnością do nanosekund. Jeśli jest zły to co wykorzystać zamiast jego?
kompilacja z -lrt
#include <iostream>
#include <ctime>
using namespace std;
long long silnia(long long n) {
if(n == 0) return 1;
else return n * silnia(n - 1);
}
// main function
int main() {
struct timespec ts1, ts2;
int n = 0;
cout << " silnia dla jakiej liczby: ";
cin >> n;
long long wynik = 1;
// rozdzielczosc zegara
clock_getres(CLOCK_REALTIME, &ts1);
cout << "rozdzielczosc zegara RPi: " << ts1.tv_nsec << " ns " << endl;
clock_gettime(CLOCK_REALTIME, &ts1); // start
for(int i = n; i > 0; --i) {
wynik *= i;
}
clock_gettime(CLOCK_REALTIME, &ts2); // stop
cout << "silnia iteracyjna: " << (ts2.tv_nsec - ts1.tv_nsec) / 1000000 << "ns" << endl;
cout << wynik << endl;
clock_gettime(CLOCK_REALTIME, &ts1); // start
wynik = silnia(n);
clock_gettime(CLOCK_REALTIME, &ts2); // stop
cout << "silnia rekurencyjna: " << (ts2.tv_nsec - ts1.tv_nsec) / 1000000 << "ns" << endl;
cout << wynik << endl;
return 0;
}
dzięki za pomoc