アルゴリズムコースの私の教授は私に次の宿題をくれました:
オイラー数(e)の値をeps> 0の所定の精度で計算するC / C ++プログラムを作成します。
ヒント:数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.71828ではなく2.5です。
|x_(i+1) - x_i| > = eps
手段「との間の距離次の値x
(x_(i+1)
)と現在の値x
(x_i
)が大きいまたはεに等しいです」。
あなたのコードは、非常に異なる条件に1つを追加しx
、チェックしています。
(euler+1) - euler >= epsilon
これは、「euler + 1
(!の次の値ではなくeuler
)から現在の値を引いた値が...になるまで繰り返す」という意味で、元の状態とは大きく異なります。また(euler+1) - euler == 1
、、したがってepsilon
、が定数1未満であるかどうかを確認しています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加