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

如何在C++中正确计算指定数学方程的和并解决输出inf的问题

问题分析

你要计算的是双曲余弦函数cosh(1),第一部分用定义式(e^1 + e^{-1})/2的计算是正确的,得到的1.54308是准确结果。第二部分的幂级数展开实现存在多处逻辑错误,才会输出inf。

现有代码的错误点

  • 变量n未初始化就参与阶乘计算,属于未定义行为,fact的初始计算结果完全错误
  • 幂级数的循环终止条件错误:你设置了n<=st,st是计算结果1.54,循环最多执行2次,完全达不到收敛要求
  • 级数项的递推逻辑完全错误:a *= 1.0/ (2 * n)*fact的计算逻辑和cosh(x)的泰勒展开式完全不匹配
  • 求和变量sum用float类型精度不足,容易出现精度误差

修正后的代码

#include <iostream>
#include <cmath> // 替换无用的ccomplex,引入M_E的正确头文件

int main() {
    // 第一部分:用定义式计算cosh(1)
    double e = M_E;
    double cosh_def = 1.0/2.0*(e + (1.0/e));
    std::cout << "定义式计算结果:" << cosh_def << std::endl;

    // 第二部分:用泰勒级数计算cosh(1),展开式为 sum_{n=0}^∞ 1/(2n)!
    double sum = 1.0; // n=0时第一项是1/(0!) = 1
    double term = 1.0; // 存储当前项的值
    const double eps = 1e-10; // 收敛阈值,项小于这个值就停止迭代

    for (int n = 1; ; n++) {
        // 递推计算下一项:第n项 = 前一项 / (2n*(2n-1))
        term /= (2*n) * (2*n -1);
        if (term < eps) break; // 项足够小,退出循环
        sum += term;
    }

    std::cout << "级数计算结果:" << sum << std::endl;

    return 0;
}

运行结果

定义式计算结果:1.54308
级数计算结果:1.54308

两个结果完全近似,符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 16:06:01