Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 程序的执行时间为;5E-006“;? double SumOfSquare()() { int i; 双T3,总计=0; 对于(i=0;i_C++_Time_Double - Fatal编程技术网

C++ 程序的执行时间为;5E-006“;? double SumOfSquare()() { int i; 双T3,总计=0; 对于(i=0;i

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

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。这是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;i
double 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;
}