为什么使用 time.h 计算函数运行时返回 0 秒

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

我正在尝试使用 time.h 求解 4 个函数运行时,但我的输出返回 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

可能只是函数相对较快,再加上时钟通常具有最小分辨率这一事实(因为它通常是某个值的倍数,你的评论支持“由于某种原因输出是四舍五入,例如 1.654000").

更好的检查方法可能是计算函数的多次次迭代(假设没有影响后续运行的副作用)并将总时间除以计数,一些喜欢:

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

这将摊销上述时钟分辨率可能产生的误差。 (例如)+/- 1 毫秒的潜在错误对耗时 1000 毫秒(一千次调用的循环)的操作的影响远小于耗时 1 毫秒(单次调用)的操作。

后者可以为您提供从 0 到 2 毫秒(+/- 100%)的任何值,前者可以为您提供 999 到 1001 毫秒(+/- 0.1%)的任何值。