C++ 程序的执行时间为;5E-006“;? double SumOfSquare()() { int i; 双T3,总计=0; 对于(i=0;i
T3是双精度的,它的值是5微秒,所以没有错误。T3是双精度的,它的值是5微秒,所以没有错误。C++ 程序的执行时间为;5E-006“;? double SumOfSquare()() { int i; 双T3,总计=0; 对于(i=0;i,c++,time,double,C++,Time,Double,T3是双精度的,它的值是5微秒,所以没有错误。T3是双精度的,它的值是5微秒,所以没有错误。5e-006与5*10^-6或0.000005是同一回事。你为什么认为这不是执行时间 (5e-006是一个写的数字。)5e-006与5*10^-6或0.000005是一样的。你怎么会认为这不是执行时间 (5e-006是写入的数字。)看看操纵器。它们用于格式化输出流,以便获得更合理的结果。看看操纵器。它们用于格式化输出流,以便获得更合理的结果。5e-006只是5*10-6的标准指数表示法,即0.000005
5e-006
与5*10^-6
或0.000005
是同一回事。你为什么认为这不是执行时间
(
5e-006
是一个写的数字。)5e-006
与5*10^-6
或0.000005
是一样的。你怎么会认为这不是执行时间
(
5e-006
是写入的数字。)看看操纵器。它们用于格式化输出流,以便获得更合理的结果。看看操纵器。它们用于格式化输出流,以便获得更合理的结果。5e-006只是5*10-6的标准指数表示法,即0.000005。这是same as 6µs.5e-006只是5*10-6的标准指数表示法,即0.000005。这与6µs相同。正如其他人已经指出的,结果是5微秒,这似乎至少与时间一样合理
但是,我会以不同的方式计算时间。我会累积循环的“滴答”数,然后将总数转换为秒:
double SumOfSquare()()
{
int i;
double T3,total=0;
for(i=0;i<200;i++) {
clock_t start = clock();
int n=100,sum=0;
for(int i =1;i<=n;i++) {
sum=sum+i*i;
}
clock_t end = clock();
T3=double(end-start)/(double) CLOCKS_PER_SEC;
total=total+T3;
}
T3=total/200;
return T3;
}
int main()
{
double T3=SumOfSquare();
cout<<T3<<endl;
return 0;
}
static const int iterations=200;
总时钟=0;
双秒;
对于(i=0;i,正如其他人已经指出的,结果是5微秒,这似乎至少是合理的时间
但是,我会以不同的方式计算时间。我会累积循环的“滴答”数,然后将总数转换为秒:
double SumOfSquare()()
{
int i;
double T3,total=0;
for(i=0;i<200;i++) {
clock_t start = clock();
int n=100,sum=0;
for(int i =1;i<=n;i++) {
sum=sum+i*i;
}
clock_t end = clock();
T3=double(end-start)/(double) CLOCKS_PER_SEC;
total=total+T3;
}
T3=total/200;
return T3;
}
int main()
{
double T3=SumOfSquare();
cout<<T3<<endl;
return 0;
}
static const int iterations=200;
总时钟=0;
双秒;
对于(i=0;i来说,显而易见的答案是代码只需要5微秒
执行。可能是因为您从未使用过sum
,所以
编译器将删除任何用于修改其值的代码(以及
因此,最重要的是,你的测量
可能是由时钟的粒度决定的
想在尽可能长的时间内进行测量:我会
如果对clock
的两次调用均为
一个零件不到5分钟(但当然,我会使用一个
调试程序时间隔较短:-)。我的解决方案
(我并不是说它是完美的)通常都是把
要在派生类中的虚拟函数中测量的代码,
在基类中的函数不做任何事情的情况下
比如:
类基
{
静态计数;
静态双乌尔塔尔;
虚拟虚空doRun();
公众:
双重运行();
静态无效设置计数(整数计数);
};
int Base::ourCount=0;
双基::ourTare=0.0;
void Base::doRun(){}
双基::run()
{
时钟启动=时钟();
对于(int count=ourCount;count>0;--count)
多伦();
clock_t end=clock();
返回(静态播放(结束-开始)/每秒时钟-时间;
}
void Base::setCount(int count)
{
我们的计数=计数;
乌尔塔尔=0.0;
//以下内容在过去已足够。如果
//编译器内联线Base::run,但是,它可能是
//不足。(在我自己的代码中,Base::run位于
//单独的翻译单位。)`
ourTare=Base().run();
}
类派生
{
int d;
虚拟虚空doRun();
公众:
};
void派生::doRun()
{
整数和=0;
对于(inti=1;i来说,显而易见的答案是代码只需要5微秒
执行。可能是因为您从未使用过sum
,所以
编译器将删除任何用于修改其值的代码(以及
因此,最重要的是,你的测量
可能是由时钟的粒度决定的
想在尽可能长的时间内进行测量:我会
如果对clock
的两次调用均为
一个零件不到5分钟(但当然,我会使用一个
调试程序时间隔较短:-)。我的解决方案
(我并不是说它是完美的)通常都是把
要在派生类中的虚拟函数中测量的代码,
在基类中的函数不做任何事情的情况下
比如:
类基
{
静态计数;
静态双乌尔塔尔;
虚拟虚空doRun();
公众:
双重运行();
静态无效设置计数(整数计数);
};
int Base::ourCount=0;
双基::ourTare=0.0;
void Base::doRun(){}
双基::run()
{
时钟启动=时钟();
对于(int count=ourCount;count>0;--count)
多伦();
clock_t end=clock();
返回(静态播放(结束-开始)/每秒时钟-时间;
}
void Base::setCount(int count)
{
我们的计数=计数;
乌尔塔尔=0.0;
//以下内容在过去已足够。如果
//编译器内联线Base::run,但是,它可能是
//不足。(在我自己的代码中,Base::run位于
//单独的翻译单位。)`
ourTare=Base().run();
}
类派生
{
int d;
虚拟虚空doRun();
公众:
};
void派生::doRun()
{
整数和=0;
对于(int i=1;idouble SumOfSquare())
真的吗?啊,我把代码复制错了,一定是没有第二个括号。请发布一篇文章。您的示例可以缩短,以揭示问题的真实性质,至少缺少一行代码,并且其中有编译错误。与您的问题密切相关:如果您在运行时进行了优化,无论值有多大你为你的两个循环选择了,你可能会得到相同的答案。聪明的钱在内部循环上被一起移除,整个事情基本上变成了(i=0;i<200;i++)total+=(clock()-clock())/CLOCKS_PER_SEC;
@Rob:虽然更好的格式和对原始源代码的正确复制会有所改进
class Base
{
static int ourCount;
static double ourTare;
virtual void doRun();
public:
double run();
static void setCount( int count );
};
int Base::ourCount = 0;
double Base::ourTare = 0.0;
void Base::doRun() {}
double Base::run()
{
clock_t start = clock();
for ( int count = ourCount; count > 0; -- count )
doRun();
clock_t end = clock();
return (static_cast<double>(end - start) / CLOCKS_PER_SEC - ourTare;
}
void Base::setCount( int count )
{
ourCount = count;
ourTare = 0.0;
// The following has been sufficient in the past. If the
// compiler inlines Base::run, however, it could be
// insufficent. (In my own code, Base::run is in a
// separate translation unit.)`
ourTare = Base().run();
}
class Derived
{
int d;
virtual void doRun();
public:
};
void Derived::doRun()
{
int sum = 0;
for ( int i = 1; i <= 100; ++ i ) {
sum += i * i;
}
d = sum;
}