使用time()函数计算执行时间

时间:2011-08-07 18:41:31

标签: c++ time ctime

我获得了以下HomeWork任务,

  

编写程序以在计算机上测试需要多长时间   nlogn,n2,n5,2n和n!增加n = 5,10,15,20。

我已经编写了一段代码,但是我一直在执行时间0.有人可以帮我解决吗?感谢

#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
int main()
{
 float n=20;
 time_t start, end, diff;
  start = time (NULL);
  cout<<(n*log(n))*(n*n)*(pow(n,5))*(pow(2,n))<<endl;
  end= time(NULL);
 diff = difftime (end,start);
 cout <<diff<<endl;
 return 0;
}

5 个答案:

答案 0 :(得分:5)

优于time(),使用秒精度是使用毫秒精度。 例如,便携式的方式。

int main(){
clock_t start, end;
double msecs;

start = clock();
/* any stuff here ... */
end = clock();
msecs = ((double) (end - start)) * 1000 / CLOCKS_PER_SEC;
return 0;
}

答案 1 :(得分:3)

在循环中执行数千次计算,以便您可以克服time的低分辨率并获得有意义的结果。记得在报告结果时除以迭代次数。

这不是特别准确,但这可能与此任务无关。

答案 2 :(得分:2)

至少在类Unix系统上,time()只提供1秒的粒度,因此对于花费很短时间的事情进行计时是没有用的(除非你在循环中多次执行它们) 。看一下gettimeofday()函数,它以微秒分辨率为您提供当前时间。或者考虑使用clock()来衡量CPU时间而不是挂钟时间。

答案 3 :(得分:1)

您的代码执行速度太快,无法被time函数检测到,返回自UTC时间1970年1月1日00:00后经过的秒数。

尝试使用这段代码:

inline long getCurrentTime() {
    timeb timebstr;
    ftime( &timebstr );
    return (long)(timebstr.time)*1000 + timebstr.millitm;
}

要使用它,您必须包含sys / timeb.h。

实际上,更好的做法是在循环中重复计算以获得更精确的结果。

答案 4 :(得分:1)

您可能需要找到更精确的平台特定计时器,例如Windows高性能计时器。您也可能(很可能)发现您的编译器优化或删除了几乎所有代码。