我的算法课程教授给了我以下作业:
编写一个 C/C++ 程序,以 eps > 0 的给定精度计算欧拉数 (e) 的值。
提示:数字 e = 1 + 1/1!+1/2!+ ... + 1 / n!+ ... = 2.7172 ... 可以计算为序列 x_0, x_1, x_2, ... 的元素之和,其中 x_0 = 1, x_1 = 1+ 1/1 !, x_2 = 1 + 1/ 1!+1/2 !, ...,只要条件 |x_(i+1) - x_i|,求和就会继续 >= eps 是有效的。
正如他进一步解释的那样,eps 是算法的精度。例如,精度可以是 1/100 |x_(i + 1) - x_i| = ( x_(i+1) - x_i ) 的绝对值
目前,我的程序如下所示:
#include<iostream>
#include<cstdlib>
#include<math.h>
#include<vector>
// Euler's number
using namespace std;
double factorial(double n)
{
double result = 1;
for(double i = 1; i <= n; i++)
{
result = result*i;
}
return result;
}
int main()
{
long double euler = 2;
long double counter = 2;
float epsilon = 2;
do
{
euler+= pow(factorial(counter), -1);
counter++;
}
while( (euler+1) - euler >= epsilon);
cout << euler << endl;
return 0;
}
当我实现停止条件 |x_(i+1) - x_i| 时问题就来了 > = eps (line where is while( (euler+1) - euler >= epsilon);) 输出是 2.5 而不是 2.71828