我想要将e的值近似到任何所需的精度。做这件事最好的方法是什么?我能得到的最多是e= 2.7182818284590455。任何关于修改以下代码的示例都将受到欢迎。
public static long fact(int x){
long prod = 1;
for(int i = 1; i <= x; i++)
prod = prod * i;
return prod;
}//fact
public static void main(String[] args) {
double e = 1;
for(int i = 1; i < 50; i++)
e = e + 1/(double)(fact(i));
System.out.print("e = " + e);
}//main发布于 2009-09-26 18:10:22
使用BigDecimal而不是double。
BigDecimal e = BigDecimal.ONE;
BigDecimal fact = BigDecimal.ONE;
for(int i=1;i<100;i++) {
fact = fact.multiply(new BigDecimal(i));
e = e.add(BigDecimal.ONE.divide(fact, new MathContext(10000, RoundingMode.HALF_UP)));
}发布于 2009-09-26 18:12:19
您的主要问题是double的精度非常有限。如果你想要任意的精度,你必须使用BigDecimal。你将遇到的下一个问题是long的有限范围,在阶乘中你很快就会超过这个范围--在那里你可以使用BigInteger。
发布于 2009-09-26 18:19:03
您看过java.util.BigDecimal中的任意精度算法吗?
import java.math.BigDecimal;
import java.math.MathContext;
public class BigExp {
public static void main(String[] args) {
BigDecimal FIFTY =new BigDecimal("50");
BigDecimal e = BigDecimal.ZERO;
BigDecimal f = BigDecimal.ONE;
MathContext context = new MathContext(1000);
for (BigDecimal i=BigDecimal.ONE; i.compareTo(FIFTY)<0; i=i.add(BigDecimal.ONE)) {
f = f.multiply(i, context);
e = e.add(i.divide(f,context),context);
System.out.println("e = " + e);
}
}
}https://stackoverflow.com/questions/1481780
复制相似问题