如何在 1000 次迭代中计算欧拉数?
How to calculate Euler number in 1000 iteration?
是否可以用一种方法计算1000次迭代中的欧拉数,我是否需要首先计算阶乘?
这是我的代码:
import java.math.BigDecimal;
public class EulerNumber {
public static void main(String[] args) {
for (int i = 1; i < 1000; i++) {
}
System.out.println("e = " + e);
}
private static double Euler() {
return 0;
}
}
是的,可以通过 1000 项的部分和计算出超过 2300 个正确数字的近似值。误差小于2/1000! (幅度为 1/300^1000)
不,没有必要计算阶乘,在任何情况下,都应该避免显式阶乘函数,只需更新前一项的下一项或使用类似 Horner 的方案从上一项开始。
很简单,如果我没理解错的话,你需要在1000次迭代中计算欧拉数,而不是计算1000次,所以for循环应该移到欧拉函数中。
public class EulerNumber {
public static void main(String[] args) {
System.out.println("e = " + Euler());
}
private static double Euler() {
double e=1;
double f=1;
for ( int i=1; i <= 1000; i++) {
f = f * (1.0 / i);
if ( f == 0 ) break;
e += f;
}
return e;
}
}
e 是到目前为止估计的欧拉数,f 是要在下一个操作中添加的分数 (1/n!)。您不必计算 n!每次,最好边计算边计算。我已经检查并知道 1000 对于双精度来说太高了,因为 f 在我的计算机中经过 178 次迭代后收敛到 0。所以剩下的过程是没有必要的。
是否可以用一种方法计算1000次迭代中的欧拉数,我是否需要首先计算阶乘?
这是我的代码:
import java.math.BigDecimal;
public class EulerNumber {
public static void main(String[] args) {
for (int i = 1; i < 1000; i++) {
}
System.out.println("e = " + e);
}
private static double Euler() {
return 0;
}
}
是的,可以通过 1000 项的部分和计算出超过 2300 个正确数字的近似值。误差小于2/1000! (幅度为 1/300^1000)
不,没有必要计算阶乘,在任何情况下,都应该避免显式阶乘函数,只需更新前一项的下一项或使用类似 Horner 的方案从上一项开始。
很简单,如果我没理解错的话,你需要在1000次迭代中计算欧拉数,而不是计算1000次,所以for循环应该移到欧拉函数中。
public class EulerNumber {
public static void main(String[] args) {
System.out.println("e = " + Euler());
}
private static double Euler() {
double e=1;
double f=1;
for ( int i=1; i <= 1000; i++) {
f = f * (1.0 / i);
if ( f == 0 ) break;
e += f;
}
return e;
}
}
e 是到目前为止估计的欧拉数,f 是要在下一个操作中添加的分数 (1/n!)。您不必计算 n!每次,最好边计算边计算。我已经检查并知道 1000 对于双精度来说太高了,因为 f 在我的计算机中经过 178 次迭代后收敛到 0。所以剩下的过程是没有必要的。