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

C++ 使用time()函数计算执行时间,c++,time,ctime,C++,Time,Ctime,我被分配了以下作业 写一个程序在你的计算机上测试它需要多长时间 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

我被分配了以下作业

写一个程序在你的计算机上测试它需要多长时间 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;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
浮点数n=20;
开始、结束、差异的时间;
开始=时间(空);

cout您的代码执行得太快,无法被返回自UTC 1970年1月1日00:00小时以来经过的秒数的函数检测到

尝试使用以下代码:

inline long getCurrentTime() {
    timeb timebstr;
    ftime( &timebstr );
    return (long)(timebstr.time)*1000 + timebstr.millitm;
}
要使用它,您必须包括sys/timeb.h


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

您的代码执行得太快,无法被返回自UTC 1970年1月1日00:00小时以来经过的秒数的函数检测到

尝试使用以下代码:

inline long getCurrentTime() {
    timeb timebstr;
    ftime( &timebstr );
    return (long)(timebstr.time)*1000 + timebstr.millitm;
}
要使用它,您必须包括sys/timeb.h


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

在循环中执行每个计算数千次,这样您就可以克服时间分辨率低的问题,并获得有意义的结果。报告结果时请记住除以迭代次数


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

在一个循环中执行每个计算数千次,这样您就可以克服时间分辨率低的问题,并获得有意义的结果。报告结果时请记住除以迭代次数


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

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

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

优于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;
}
使用毫秒精度比使用秒精度的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;
}

至少在类似Unix的系统上,
time()
只提供1秒的粒度,因此它对于计时耗时很短的事情(除非在循环中多次执行它们)没有用处函数,它给你当前的微秒分辨率时间,或者考虑使用<代码>时钟()/代码>,它测量CPU时间而不是挂钟时间。

< P>至少在UNIX类系统中,时间(<)>代码>只给了你1秒的粒度,所以它对于时间很短的事情是没有用的。(除非在循环中执行多次)。请看<代码> GETTimoFayEd()/<代码>函数,它给出当前的微秒分辨率的时间,或者考虑使用<代码>时钟()。
,它测量的是CPU时间而不是挂钟时间。

似乎您更愿意执行这么多次的加法运算。虽然可能很难测量2432902008176640000次加法运算的时间。-这项练习的重点可能是了解不同的算法复杂性,而不是计算任意运算的时间操作。我知道你完全不知道C是什么。让我给你一个提示:它没有
。是的,它的意思是解释大O。这是一个多么可怕的任务!为什么要编写一个计算机程序来执行n,n^2,n!操作并对它们计时,对于一些n值?为什么不在计算器上计算n,n^2,n!等等。或者,如果你没有o写一个程序,写一个打印n,n^2,n值的程序!有人请解雇教授!
difftime()
返回一个double,而不是time\t。似乎您更愿意执行这么多次的加法运算。虽然可能很难测量2432902008176640000次加法的时间。-这项练习的重点可能是了解不同的算法复杂性,而不是对任意运算计时。我知道您我完全不知道C是什么。让我给你一个提示:它没有
。是的,它的意思是解释大O。这是一个多么可怕的任务!为什么要编写一个计算机程序来执行n,n^2,n!个运算并对它们计时,对于一些n的值?为什么不在计算器上计算n,n^2,n!等等。或者,如果你必须编写一个程序,那么就编写打印n,n^2,n!的值的程序!有人请解雇教授!
difftime()
返回一个双精度值,而不是时间。请记住
clock()
测量的是CPU时间,而不是挂钟时间——这可能意味着在这种情况下更好。请记住
clock()
测量CPU时间,而不是挂钟时间——这可能意味着在这种情况下更好。