Я пытаюсь измерить, сколько времени занимает функция.
У меня небольшая проблема: хотя я стараюсь быть точным и использую числа с плавающей запятой, каждый раз, когда я печатаю свой код с помощью %lf
, я получаю один из двух ответов: _2 _... или _3 _... Это заставляет меня задаться вопросом, а мой код правильный:
#define BILLION 1000000000L;
// Calculate time taken by a request
struct timespec requestStart, requestEnd;
clock_gettime(CLOCK_REALTIME, &requestStart);
function_call();
clock_gettime(CLOCK_REALTIME, &requestEnd);
// Calculate time it took
double accum = ( requestEnd.tv_sec - requestStart.tv_sec )
+ ( requestEnd.tv_nsec - requestStart.tv_nsec )
/ BILLION;
printf( "%lf\n", accum );
Большая часть этого кода была написана не мной. В этом примере страницы был код, иллюстрирующий использование clock_gettime
:
Может ли кто-нибудь сообщить мне, что неверно, или почему я получаю только int
значения?
#define CLOCK_PRECISION 1000000000L /* one billion */
- person pmg   schedule 16.10.2010CLOCK_PRECISION
, было бы необходимо только в том случае, если бы единицы не были ясны из имени переменной. В приведенном выше случае из названияtv_nsec
ясно, что мы находимся в наносекундах. Так чтоNANOSECONDS_PER_SECOND
может быть подходящим, но на самом деле это не сильно отличается от простогоBILLION
. - person Oliver Charlesworth   schedule 16.10.2010CLOCK_REALTIME
влияют скачки системного времени. Рассмотрите возможность использованияCLOCK_MONOTONIC_RAW
- на него не влияют корректировки времени сadjtime()
и скачки времени. - person Dmitry   schedule 07.06.2019