You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++计算第100、200位斐波那契数使用long double结果错误求助

问题原因

  • 浮点数类型(double/long double)的存储有精度上限:double仅能精确表示不超过2^53的整数,对应十进制约15~17位;long double根据平台不同最多也只有几十位的精确整数范围,而斐波那契数列第100位就已经有21位十进制数,远超过浮点数的精确表示范围,自然会出现结果错误。
  • 你当前用浮点数存储斐波那契值的方案,天然不适合计算序数较大的斐波那契数。

解决方案

改用大数加法实现,用字符串存储每一位斐波那契数值,手动模拟十进制加法逻辑,就可以支持任意大序数的斐波那契数计算,示例代码如下:

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

// 大数加法:输入两个正整数字符串,返回相加后的字符串
string add(string a, string b) {
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    string res;
    int carry = 0;
    int i = 0;
    while (i < a.size() || i < b.size() || carry) {
        int sum = carry;
        if (i < a.size()) sum += a[i] - '0';
        if (i < b.size()) sum += b[i] - '0';
        carry = sum / 10;
        res.push_back(sum % 10 + '0');
        i++;
    }
    reverse(res.begin(), res.end());
    return res;
}

int main() {
    int n;
    while (cin >> n) {
        if (n == 0) {
            cout << "0\n";
            continue;
        }
        if (n == 1) {
            cout << "1\n";
            continue;
        }
        string a = "0", b = "1", c;
        for (int i = 2; i <= n; i++) {
            c = add(a, b);
            a = b;
            b = c;
        }
        cout << b << "\n";
    }
    return 0;
}

该方案没有数值上限限制,只要内存足够可以计算任意序数的斐波那契数,所有运算都是整数精确计算,不会出现精度丢失问题。

内容的提问来源于stack exchange,提问作者Khaldoun Al Halabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:15:02