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

如何在C++中计算欧拉数的前N位 以前200位高精度计算为例

纯C++实现欧拉数前200位计算方案

核心思路

  • 放弃double类型,改用自定义高精度数组实现大数运算,利用欧拉数泰勒展开收敛速度极快的特性完成计算
  • 欧拉数的泰勒展开式可变形为嵌套递推形式:e = 1 + 1/1 * (1 + 1/2 * (1 + 1/3 * (... + 1/n)...)),该形式仅需要实现「高精度数除以小整数」的运算逻辑,不需要复杂的大数四则运算,实现成本极低
  • 提前确定计算终止条件:要得到200位有效数字,仅需要计算到n=100左右即可,此时1/n!的精度已经远低于10^-200,不会对结果产生可观测的影响

具体实现步骤

  1. 定义一个长度为210的整型数组(或vector<int>)存储高精度结果,多预留10位空间避免进位误差,每一个数组元素存储结果的一位十进制数
  2. 初始化数组所有元素为0
  3. 从n=100开始倒序循环到n=1:
    • 对整个高精度数组执行除以n的操作,逐位计算商和余数,余数传递到下一位计算
    • 给高精度数组的最低位(对应整数部分)加1
  4. 循环结束后,数组的首位元素就是欧拉数的整数部分2,后续200位就是所需的小数部分,按顺序输出即可

核心代码片段示例

#include <iostream>
#include <vector>
using namespace std;

int main() {
    const int PRECISION = 200;
    vector<int> res(PRECISION + 10, 0); // 预留10位冗余位避免误差
    
    // 倒序递推计算
    for (int n = 100; n >= 1; --n) {
        int carry = 0;
        // 高精度数除以小整数n的实现
        for (int i = 0; i < res.size(); ++i) {
            int current = res[i] + carry * 10;
            res[i] = current / n;
            carry = current % n;
        }
        res[0] += 1; // 整数部分加1
    }
    
    // 格式化输出结果
    cout << res[0] << ".";
    for (int i = 1; i <= PRECISION; ++i) {
        cout << res[i];
    }
    cout << endl;
    return 0;
}

运行上述代码即可得到欧拉数的前200位有效数字,结果可与标准欧拉数公开数值做校验,误差符合精度要求。

内容的提问来源于stack exchange,提问作者Kemsikov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:06:03