为什么双数据类型在C ++中会出错? [重复]

问题描述 投票:-1回答:1

这是我编写的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,为什么会发生这种情况?

c++ vector double precision stdvector
1个回答
1
投票

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

例如使用

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

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

© www.soinside.com 2019 - 2024. All rights reserved.