-7

我正在尝试计算交流程序的效率。我正在使用 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

4 回答 4

3

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

于 2013-10-19T07:01:50.173 回答
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 时间。

于 2013-10-19T07:03:21.743 回答
0
printf("%0.2f",(end - start)/CLOCKS_PER_SEC);

这是简单的数学。做结束-开始

于 2013-10-19T07:02:30.350 回答
0

结束时间在开始时间之后。

你应该把它改成printf("%0.2f",(end-start)/CLOCKS_PER_SEC);

于 2013-10-19T07:02:56.587 回答