C++ c++;测量程序执行时间

C++ c++;测量程序执行时间,c++,C++,我有代码,其中我无法执行适当的函数时间测量: 我使用了来自这里的帖子中关于测量时间的说明,我认为一切都应该是好的,但显然不是。 请给我一些直接的答案,但是没有链接到C++文档,因为它没有帮助。 #include <iostream> #include<cstdlib> #include <ctime> using namespace std; int ffibr(int n) { if (n<3) return 1;

我有代码,其中我无法执行适当的函数时间测量: 我使用了来自这里的帖子中关于测量时间的说明,我认为一切都应该是好的,但显然不是。 请给我一些直接的答案,但是没有链接到C++文档,因为它没有帮助。
#include <iostream>
#include<cstdlib>
#include <ctime>

using namespace std;



int ffibr(int n)
{
    if (n<3)
        return 1;

    return ffibr(n-1)+ffibr(n-2);
}
int ffibi(int n)
{
    int a = 1, b = 1,i;
    for (i = 3; i <n+1; i++)
    {
        int c = a + b;
        a = b;
        b = c;
    }
    return b;
}
int ffibm(int n)
{
    int q11,q12,q21,q22, 
        p11,p12,p21,p22, 
        w11,w12,w21,w22; 

    if(n < 2) return n;



    q11 = q12 = q21 = 1;
    q22 = 0;



    w11 = w22 = 1;
    w12 = w21 = 0;

    n--;     

    while(n)
    {
        if(n & 1)
        {


            p11 = w11*q11 + w12 * q21;
            p12 = w11*q12 + w12 * q22;
            p21 = w21*q11 + w22 * q21;
            p22 = w21*q12 + w22 * q22;



            w11 = p11;
            w12 = p12;
            w21 = p21;
            w22 = p22;

        }

        n >>= 1;    

        if(!n) break;



        p11 = q11*q11 + q12 * q21;
        p12 = q11*q12 + q12 * q22;
        p21 = q21*q11 + q22 * q21;
        p22 = q21*q12 + q22 * q22;



        q11 = p11;
        q12 = p12;
        q21 = p21;
        q22 = p22;

    }

    return w11;
}

int main()
{
    int n;
    cerr << "Podaj n-ty wyraz ciagu fibonacciego"<<endl;
    cin >> n;


    clock_t poczatek, koniec; 
    double czas1=0;
    poczatek = clock(); 

    for (int i=0; i<1000; ++i)

        return ffibi(n);  

    koniec = clock(); 
    czas1 = (double)(koniec-poczatek)/(double)(CLOCKS_PER_SEC); /
system("pause");



    cerr << n<<" wyraz ciagu fibonacciego wyliczony metoda rekurencyjna to " << ffibr(n)<<endl;
    cerr << n<<" wyraz ciagu fibonacciego wyliczony metoda iteracyjna to " << ffibi(n)<<endl;
    cerr << n<<" wyraz ciagu fibonacciego wyliczony metoda macierzy to " << ffibm(n)<<endl;
    cerr << "Czas trwania funkcji ffibi to " << czas1<<endl;
    //cerr << "Czas trwania funkcji ffibr to " << czas2<<endl;


    return 0;
}
#包括
#包括
#包括
使用名称空间std;
内部ffibr(内部n)
{
如果(n=1;
如果(!n)中断;
p11=q11*q11+q12*q21;
p12=q11*q12+q12*q22;
p21=q21*q11+q22*q21;
p22=q21*q12+q22*q22;
q11=p11;
q12=p12;
q21=p21;
q22=p22;
}
返回w11;
}
int main()
{
int n;

cerr这将在for循环的第一次迭代中退出
main()

for (int i=0; i<1000; ++i)

    return ffibi(n);  

注意使用volatile以防止编译器优化冗余循环。

返回ffibi(n)
在for循环中显然是非常错误的。
函数起作用,但时间测量不起作用。
有很多方法可能不起作用。请更具体一点,正如我提到的,我做了很多研究。这并不能解决您当前的问题,但对于C++11(当前标准)中的计时,您可以使用@AD_催眠器“任何想帮忙而不只是发表评论的人?”态度不好。我想知道,为什么匿名否决投票?第一个代码段是正确的,但第二个代码段在循环中没有返回值。可能只是输入错误。@SebastianLange:第二个代码段在函数
int ffibr(int n)中的
koniec=clock();
语句之前有返回值
我的坏习惯。这样根本不行。
for (int i=0; i<1000; ++i)

    return ffibi(n);  
for (int i=0; i<1000; ++i)
{
    volatile int result = ffibi(n);  
}