2015-05-13 124 views
2

我想測量一下insert_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,它具有微秒粒度。

但請注意,timegettimeofday都會爲您留出時間。如果你想CPU時間clock可以使用。

+0

我試過了。但是,我沒有工作代碼。我該怎麼辦? –

+2

你應該做的是顯示你的代碼。 – kaylum

+0

錯誤]'t0'未聲明(首次在此函數中使用) [注意]每個未聲明的標識符只會爲其出現的每個函數報告一次 [錯誤]'t1'未聲明(首次在此函數中使用) –

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); 

,這將給你一個浮點值與浮點格式打印。當gettimeofday()只支持6位(默認值是6位小數,但顯性通常很好)時,請求10位小數沒有意義。

您還可以使用:

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

@Gurbuz先生:嘗試整理5,000個元素而不是僅僅5個。或者大膽地嘗試5萬個,甚至500,000個。不要高得多,否則你可能會用完堆棧空間(如果你使用Wijndows,我不確定你會安全在500.000)。基本上,排序5個元素的時間不足以註冊。 –