我获得了以下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;
}
答案 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高性能计时器。您也可能(很可能)发现您的编译器优化或删除了几乎所有代码。