由于用户使用我的工作作为他们自己的用户关闭

时间:2013-03-01 04:48:49

标签: c clock fibonacci

已删除,抱歉..........................................

3 个答案:

答案 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;

<击>

如果你的程序运行速度比时钟粒度快,那么无论你做什么,它都将为零(因为yx将是相同的)。 但至少对于浮点除法,你可以得到小数秒。

[edit] 实际上是我的错误。出于某种原因,我认为xy是整数(因为您使用它们来存储clock的返回值)。所以在这种情况下,你的运行速度可能比时钟周期快。

如果要对快速操作进行基准测试,则需要执行以下一项或两项操作:

  • 多次重复操作(一千,一百万......)
  • 使用更高分辨率的计时器