小编Meg*_*ery的帖子

e ^ x的无限和收敛到不正确的值

我正在尝试实现一种不使用阶乘计算e ^ x的方法.我这样做是通过获得每两个连续项之间的比率,并通过将该比率乘以最后一个项来计算下一个项.所有这些都被添加到结果总和中,直到该项足够小到无关紧要.

这适用于x的小值.对于x的"极端"值,这会因某种原因而中断.我试过-50,它应该打印1.9287498e-22(固定格式).我得到的是GNU GCC中的-56676.4235303065和VC++中的2041.8329628977.两者都是错误的.这是我的代码:

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
    double x;
    cout << fixed << setprecision(10) ;
    cout << "Enter x: " << endl;
    cin >> x;
    double sum = 0;
    long long i = 0;
    double term = 1;
    do
    {
        sum += term;
        term *= (x / (++i));
    } while (fabs(term) > 1e-10);
    cout << sum << endl;
}
Run Code Online (Sandbox Code Playgroud)

这里有我的问题:导致这个错误出现在x的大值上的问题是什么,我该如何解决这个错误?为什么GNU GCC和VC++ 2017会得到完全不同的答案?

c++ math

4
推荐指数
1
解决办法
145
查看次数

标签 统计

c++ ×1

math ×1