为什么双精度数据类型在C++中出错?

Why is double data type gives error in C++?

本文关键字:出错 C++ 双精度 数据类型 为什么      更新时间:2023-10-16

这是我编写的C++程序,用于获取从1到100的斐波那契数。

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
int n;
vector<double> f;
//adding first two fibonacci numbers to vector
f.push_back(0);
f.push_back(1);
cout<<"How many fibonacci numbers do you want : ";
cin>>n;
for(int i=0; i<n; i++)
{
if(i>1)     f[i] = f[i-1] + f[i-2];
cout<<(i+1)<<": "<<fixed<<setprecision(0)<<f[i]<<endl;
}
}

所有结果在最多 79 个值之前都是正确的,但在第 80 个值之后并不完全是 78 和 79 个值的总和。 输出为:

....
78: 5527939700884757
79: 8944394323791464
80: 14472334024676220
....

这里的最后一个数字应该是 1,但它显示 0,为什么会发生这种情况?

不能对向量中尚不存在的向量元素使用下标运算符。

所以使用例如

if(i>1) f.push_back( f[i-1] + f[i-2] );

请注意,double类型的对象可能无法正确存储给定范围内的所有斐波那契数。您可以使用类型long double代替类型double