C++ 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;
#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);
}