已删除,抱歉..........................................
答案 0 :(得分:1)
使用n=30
,您的程序会执行如此少量的工作,它将以零clock
粒度显示为零时间。在某些系统上,clock
每10ms一次。假设您有相当快的控制台I / O,您可能处于数十或数百微秒范围内,并且可能在printf
中花费99.99%的时间。
尝试输入一个更大的数字,如1000000.然后你应该得到非零的东西。
答案 1 :(得分:0)
试试这个
struct timeval start, end;
long mtime, secs, usecs;
gettimeofday(&start, NULL);
// your processing.
gettimeofday(&end, NULL);
secs = end.tv_sec - start.tv_sec;
usecs = end.tv_usec - start.tv_usec;
mtime = ((secs) * 1000 + usecs/1000.0) + 0.5;
printf("Elapsed time: %ld millisecs\n", mtime);
答案 2 :(得分:-1)
问题是您正在进行整数除法,然后将其转换为浮点数。否则,您的结果将向下舍入到最接近的秒。在分割之前,您需要将 (y-x)
转换为浮点数:
z = (float)(y-x) / CLOCKS_PER_SEC;
击> <击> 撞击>
如果你的程序运行速度比时钟粒度快,那么无论你做什么,它都将为零(因为y
和x
将是相同的)。 但至少对于浮点除法,你可以得到小数秒。
[edit] 实际上是我的错误。出于某种原因,我认为x
和y
是整数(因为您使用它们来存储clock
的返回值)。所以在这种情况下,你的运行速度可能比时钟周期快。
如果要对快速操作进行基准测试,则需要执行以下一项或两项操作: