2015-05-13 18 views
2

Я хочу измерить время, затраченное на функцию insertion_sort. Но результат составляет 0,0000000 секунд. Что я могу сделать? Я пробовал другие библиотеки времени. Не случайно, это не ... Спасибо. Я снова подал голос.C - Время выполнения функции измерения

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <time.h> 

int main(void) 
{ 
    int number=1; 
    if(number == 1) 
    { 
    struct timeval start, end; 
    gettimeofday(&start, NULL); 

    for(int i=0; i<5;i++) 
    { 
    insertion_sort(kelime, n); 
    } 
    gettimeofday(&end, NULL); 

    printf("Elapsed time is %.10f",(end.tv_sec * 1000000 + end.tv_usec)- (start.tv_sec * 1000000 + start.tv_usec)); 
} 
+0

Посмотрите на встроенный 'rdtsc'. –

ответ

2

time только имеет секундную гранулярность. В то время как ваш код, вероятно, будет в микросекундах или миллисекундах в худшем случае. Вместо этого используйте gettimeofday, который имеет микросекундную гранулярность.

Отметьте, что и time, и gettimeofday дает вам время на стене. Если вы хотите использовать процессорное время clock.

+0

Я попробовал. Но я не работал с кодом. Что мне делать? –

+2

Что вам нужно сделать, это показать свой код. – kaylum

+0

Ошибка] 't0' uneclared (первое использование в этой функции) [Примечание] каждый необъявленный идентификатор сообщается только один раз для каждой функции, которая появляется в [Ошибка] 't1' uneclared (сначала используется в этой функции) –

0

Ваш расчет и печать:

printf("Elapsed time is %.10f", 
     (end.tv_sec * 1000000 + end.tv_usec) - 
     (start.tv_sec * 1000000 + start.tv_usec)); 

Вы пытаетесь напечатать целое значение с форматом с плавающей точкой; это не приведет к счастью. Предполагая, что целочисленная арифметика не переполнения, то вы можете использовать:

printf("Elapsed time is %.6f", 
     ((end.tv_sec * 1000000 + end.tv_usec) - 
     (start.tv_sec * 1000000 + start.tv_usec))/1000000.0); 

, который даст вам значение с плавающей точкой для печати в формате с плавающей точкой. Нет смысла запрашивать 10 знаков после запятой, когда gettimeofday() поддерживает только 6 (и 6 знаков после запятой по умолчанию, но часто бывает очевидным).

Вы также можете использовать:

printf("Elapsed time is %.6f", 
     ((end.tv_sec * 1000000.0 + end.tv_usec) - 
     (start.tv_sec * 1000000.0 + start.tv_usec))/1000000); 

Ключевым моментом является то, чтобы убедиться, что достаточное количество вычислений делается в арифметики с плавающей точкой.

+0

Я пробовал все, но он не работает. Он печатает 0,00000000 –

+0

@ Mr.Gurbuz: попробуйте отсортировать 5000 элементов вместо 5. Или быть смелым и пойти на 50 000, или даже 500 000. Не выходите намного выше, или вы можете бежать из стекового пространства (я не уверен, что вы будете в безопасности на 500 000, если вы на Wijndows). В принципе, сортировка 5 элементов занимает недостаточно времени для регистрации. –

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