我正在尝试实现一种不使用阶乘计算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会得到完全不同的答案?