2013-11-11 5 views
1

В моем домашнем задании я должен измерить время вычисления для разных алгоритмов. Для этого мне даны следующие функции «beginTime» и «endTime». Однако, когда я их компилирую вместе с моим алгоритмом, компилятор показывает, что «start» и «stop» не определены. Но я не знаю, как их определить (какой тип они должны быть), и как заставить «start» в «endTime» ссылаться на «start» в «beginTime». Как я могу это исправить? Также, как я могу напечатать возвращаемое значение?Как измерить время вычисления

void 
beginTime() 
{ 
gettimeofday (&start, 0); 
} 

float 
endTime() 
{ 
gettimeofday (&stop, 0); 

double begin = (double) start.tv_sec + (double) (start.tv_usec/1.E6); 

double end = (double) stop.tv_sec + (double) (stop.tv_usec/1.E6); 

return end - begin; 
} 
+2

Использование 'float' для' endTime() 'начнет отбрасывать микросекунды, как только вы запустите таймер более 10 секунд. Вам почти наверняка нужно использовать 'double', а не' float'. –

+0

@JonathanLeffler: 'float' хватает. Фактические вычисления выполняются с помощью 'double'. Только результат преобразуется в 'float'. Вероятно, домашнее задание не требует измерения общего времени с относительной точностью больше 2 ** - 23. –

ответ

3

Если вы посмотрите функцию gettimeofday, вы увидите, что она занимает struct timeval. Ваш код должен выглядеть следующим образом:

#include <sys/time.h> 

static struct timeval start, stop; 

void beginTime() 
{ 
    gettimeofday (&start, 0); 
} 

float endTime() 
{ 
    gettimeofday (&stop, 0); 
    double begin = (double) start.tv_sec + (double) (start.tv_usec/1.E6); 
    double end = (double) stop.tv_sec + (double) (stop.tv_usec/1.E6); 
    return end - begin; 
} 
1

В man page for gettimeofday() списки соответствующий тип:

struct timeval { 
    time_t  tv_sec;  /* seconds */ 
    suseconds_t tv_usec; /* microseconds */ 
}; 

Вы должны сохранить start где-то. В худшем случае (поскольку это домашнее задание), возможно, просто сделать его глобальной переменной. В производственной среде ваша функция beginTime() фактически вернет double за время начала, которое вы просто запишите перед запуском алгоритма, который вы пытаетесь выполнить.

Смежные вопросы