C++ Fibonacci 的通项公式

来源:百度知道 编辑:UC知道 时间:2024/05/23 15:57:01
说是要……求Fibonacci的第K项的位数
我用的公式,但数数据大了之后可能会有错,不知道怎么处理。大家看下问题在哪,有什么办法解决
为了大家方便回答我的问题,我把的我代码给出来。好让大家指点一下
#include<iostream>
#include<cmath>
using namespace std;

long double G(int _k){
switch(_k){
case 1:
case 2: return 0; break;
default:return log10l((powl((1.0+powl(5,0.5))/2,_k))/powl(5,0.5));
//default:return log10l(powl(10.0,G(_k-2))+powl(10.0,G(_k-1)));-powl((1.0-powl(5,0.5))/2,_k)
}
//return 0;
}

int main(){
int n,k;
long double y;
long long value;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&k);
y = G(k)+1;
value = (long long)y;
printf("%lld\n",value);
}
return 0;
}

log(a*b)=log(a)+log(b);
log(a/b)=log(a)-log(b);
分解后再求解

因为long double精度有限,所以得出的数字是不准确的。

显然通向公式是无敌的 但是电脑精度真的是有问题的
so 还是使高精吧

高精度