+ + + ... + であるeを見つける必要があります。nをパラメーターとして指定すると、正しい答えが得られません。1/0!
1/1!
1/2!
1/3!
1/n!
public double Factorial(int n) {
long fact = 1;
for (int i = 1; i <= n; ++i) {
fact *= i;
}
return fact;
}
public double euler(int n) {
double y = 0;
for (int x = 0; x <= n; x++) {
double e = 1 / Factorial(n);
y = y + e;
}
return y;
私が入力すると10
、これは2.7557319223985893E-6
私が取得する必要があるときに出力されます2.7182818011463845
。コードを数回実行しましたが、問題を理解できません。どんな助けでもありがたいです。
コメントで与えられた答えは問題に対処します。また、アルゴリズムがダウンしているので、次のことに興味があるかもしれません。
階乗法は必要ありません。n!
isの後続の各値はn! * (n+1)
、次のようにメインループに組み込むことができます。
// initialize fact to 0!
double fact = 1;
// first Euler term 1/0!
double y = fact;
for (int x = 1; x <= n; x++) {
// next factorial
fact *= x;
// subsequent terms
y += (1 / fact);
}
System.out.println(y);
プリント
2.7182818011463845
また、rが0に近づくにつれて、オイラーの数は(1 + r)(1 / r)の制限でもあります。
double r = .000000001;
System.out.println(Math.pow(1 + r, 1/r));
2.71828205201156
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加