我正在尝试计算c程序的效率。我正在使用cclock()函数来计算执行程序所消耗的时间。 这是代码 但我得到负面的输出
#include <time.h>
#include <stdio.h>
int main(){
clock_t start,end,total;
start = clock();
int i;
for(i=0;i<1000;i++)
{
printf("%d\n",i);
}
end = clock();
printf("%0.2f",(start-end)/CLOCKS_PER_SEC);
return (0);
}
答案 0 :(得分:3)
使用 end-start ,而不是 start-end !
答案 1 :(得分:1)
start - end
从较小的时间减去更长的时间,因此你得到负值的原因。这就像问你为什么在从三减七时得到一个负值: - )
您需要从start
中减去end
。
另外,不能保证clock_t
和CLOCKS_PER_SEC
是浮点类型。如果它们是整数类型,则可能最终得到整数除法。如果您真的想要浮动值,请使用以下内容:
(double)(end - start) / CLOCKS_PER_SEC
您的代码中还有其他一些小问题,没什么大不了的,但我认为更清晰的实现方式如下:
#include <time.h>
#include <stdio.h>
int main (void) {
clock_t duration = clock();
for (int i = 0; i < 1000; i++)
printf ("%d\n", i);
duration = clock() - duration;
printf ("%0.2f seconds\n", (double)(duration) / CLOCKS_PER_SEC);
return 0;
}
另外,在现代系统上输出一千行可能需要大约零秒的CPU时间。我假设您的有效负载会稍微复杂一些,但如果上面的代码根本不占用CPU时间(至少小数点后两位),也不要感到惊讶。事实上,我必须将循环乘以100才能在我的系统上达到0.3秒。
并且不要认为通过使用类似sleep()
之类的东西可以获得更长的持续时间,因为这几乎肯定不会占用任何CPU时间。
答案 2 :(得分:0)
printf("%0.2f",(end - start)/CLOCKS_PER_SEC);
这是简单的数学。 结束 - 开始。
答案 3 :(得分:0)
结束时间是在开始时间之后。
您应该将其更改为printf("%0.2f",(end-start)/CLOCKS_PER_SEC);