为什么clock()函数给出负输出?

时间:2013-10-19 06:59:50

标签: c

我正在尝试计算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);
}

4 个答案:

答案 0 :(得分:3)

使用 end-start ,而不是 start-end

答案 1 :(得分:1)

start - end从较小的时间减去更长的时间,因此你得到负值的原因。这就像问你为什么在从三减七时得到一个负值: - )

您需要从start中减去end


另外,不能保证clock_tCLOCKS_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);