2013-02-25 8 views
0

В приведенном ниже коде должно быть указано время выполнения в секундах цикла for. Если посмотреть на другие ресурсы, это должно сделать трюк, имеющий начальный clock(), отложенный от clock() после того, как цикл for запущен. Любые идеи, почему код не работает так, как написано?Поиск времени выполнения сегмента кода в C

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

//prototypes 
int rfact(int n); 
int temp = 0; 

main() 
{ 
    int n = 0; 
    int i = 0; 
    double result = 0.0; 
    clock_t t; 
    printf("Enter a value for n: "); 
    scanf("%i", &n); 

    printf("n=%i\n", n); 

    //get current time 
    t = clock(); 

    //process factorial 2 million times 
    for(i=0; i<2000000; i++) 
    { 
     rfact(n); 
    } 

    printf("n=%i\n", n); 

    //get total time spent in the loop 
    result = (double)((clock() - t)/CLOCKS_PER_SEC); 

    //print result 
    printf("runtime=%d\n", result); 
} 

//factorial calculation 
int rfact(int n) 
{ 

    if (n<=0) 
    { 
     return 1; 
    } 
    return n * rfact(n-1); 
} 
+1

Вы забыли задать вопрос. –

+0

хорошо, что неловко. – zakparks31191

ответ

2
result = (double)((clock() - t)/CLOCKS_PER_SEC); 

Это должно быть:

result = ((double)(clock() - t))/CLOCKS_PER_SEC; 

В противном случае, вы делаете целочисленное деление и преобразование результата в дубль, который не то, что вы хотите.

также:

printf("runtime=%d\n", result); 

Должно быть:

printf("runtime=%f\n", result); 
+0

Когда я запускаю его, я получаю длинное число, после того, как оно заканчивается в миллисекундах. Выходные переключатели между -343597384 и 1202590843 каждый другой запуск – zakparks31191

+0

У вас есть: 'printf (" runtime =% d \ n ", result);'. '% d' для' int ', но' result' является float. –