在 java 中查找欧拉数的问题
Issue finding euler's number in java
我必须找到 e,即 1/0!
+ 1/1!
+ 1/2!
+ 1/3!
... + 1/n!
给定 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.7182818011463845
时输出 2.7557319223985893E-6
。我 运行 通过代码几次,但我无法弄清楚问题所在。感谢您的帮助。
评论中给出的答案解决了问题。由于您掌握了算法,您可能对以下内容感兴趣:
不需要阶乘法。由于 n!
的每个后续值都是 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
而欧拉数也是(1 + r)(1/r)的极限如r 接近 0.
double r = .000000001;
System.out.println(Math.pow(1 + r, 1/r));
2.71828205201156
我必须找到 e,即 1/0!
+ 1/1!
+ 1/2!
+ 1/3!
... + 1/n!
给定 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.7182818011463845
时输出 2.7557319223985893E-6
。我 运行 通过代码几次,但我无法弄清楚问题所在。感谢您的帮助。
评论中给出的答案解决了问题。由于您掌握了算法,您可能对以下内容感兴趣:
不需要阶乘法。由于 n!
的每个后续值都是 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
而欧拉数也是(1 + r)(1/r)的极限如r 接近 0.
double r = .000000001;
System.out.println(Math.pow(1 + r, 1/r));
2.71828205201156