【发布时间】:2016-06-16 12:05:36
【问题描述】:
有人可以解释一下这个 clock() (time_h) 的行为吗:
clock_t start, stop;
long i;
double t = 0.;
for(i = 0; i < 10e7; i++){
start = clock();
//nothing
stop = clock();
t = t + (double)(stop - start) / CLOCKS_PER_SEC;
}
printf("t: %fs\n", t);
输出:
t: 12.883712s
我认为原因可能是由clock() 错误引起的小t 值的累积。有办法解决吗?
更新:只是为了解释“现实世界”的情况,因为有很多建议。 //nothing 是一段代码,其时间间隔非常小(可能是纳米级),而不是一个循环,其中很少有也很难测量。
【问题讨论】:
-
你为什么期望 start 和 stop 是相等的?调用“clock()”并将值复制到变量不是“//nothing”;)
-
执行你的程序需要多长时间(使用真正的挂钟)?
-
期望值是多少?当然不是零,两次测量之间时钟上升的概率非零。
-
#include <time.h>在哪里?否则,clock()的返回值将被截断为有符号的int值。 -
@Matsmath clock() 执行会影响总时间,因此没有必要测量程序总时间。