簡體   English   中英

為什么使用 time.h 計算 function 運行時返回 0 秒

[英]Why is calculating function runtime returning 0 seconds using time.h

我正在嘗試使用 time.h 來解決 4 個函數運行時問題,但我的 output 返回 0.000000 秒

double timep[4] = {0.0};

clock_t begin, end;

begin = clock();
function1();
end = clock();
timep[0] = (double)(end - begin) / CLOCKS_PER_SEC;

begin = clock();
function2();
end = clock();
timep[1] = (double)(end - begin) / CLOCKS_PER_SEC;

begin = clock();
function3();
end = clock();
timep[2] = (double)(end - begin) / CLOCKS_PER_SEC;

begin = clock();
funtion4();
end = clock();
timep[3] = (double)(end - begin) / CLOCKS_PER_SEC;

使用 (%lf) 打印 timep 數組產量

0.000000
0.000000
0.000000
0.000000

可能只是功能相對較快,再加上時鍾通常具有最小分辨率的事實(因為它通常是某個值的倍數,您的評論支持“出於某種原因,output 被四舍五入,例如 1.654000” )。

更好的檢查方法可能是對 function 的多次迭代進行計時(假設沒有會影響以后運行的副作用)並將總時間除以計數,例如:

#define QUANT 1000
begin = clock();
for (int i = 0; i < QUANT; ++i)
    function1();
end = clock();
timep[0] = (double)(end - begin) / CLOCKS_PER_SEC / QUANT;

這將分攤上述時鍾分辨率可能產生的誤差。 (例如)+/- 1ms 的潛在錯誤對耗時 1000ms(一千次調用的循環)的操作的影響遠小於耗時 1ms(單個調用)的操作。

后者可以為您提供從 0 到 2ms (+/- 100%) 的任何值,前者為 999 到 1001ms (+/- 0.1%)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM