c - 为什么使用 time.h 计算函数运行时返回 0 秒
问题描述
我正在尝试使用 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;
这将分摊上述时钟分辨率可能产生的误差。(例如)+/- 1ms 的潜在错误对耗时 1000ms(一千次调用的循环)的操作的影响远小于耗时 1ms(单个调用)的操作。
后者可以为您提供从 0 到 2ms (+/- 100%) 的任何值,前者为 999 到 1001ms (+/- 0.1%)。
推荐阅读
- scala - Spark sql优化技术将csv加载到hive的orc格式
- python - 无法覆盖自定义字段 __init__ 并进行迁移,抛出错误
- c++ - 了解此 printf 的结果
- python - Postgres 仅在部署到 Heroku(Flask)时才返回意外结果
- javascript - 在 Javascript 对象数组中查找递归(循环)id
- scipy - 是否可以解决 python 的 RegularGridInterpolator 中的输入?
- javascript - 你能用JS移动一个div吗?
- ruby - 简单的红宝石,除非方法错误
- c# - 如何在C#中检测控件是否是按钮
- javascript - 无法从 cpanel 连接我在 mongodb atlas 上创建的 mongodb 集群