Sha*_*ron 5 java math precision
我想将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
Run Code Online (Sandbox Code Playgroud)
Zed*_*Zed 13
使用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)));
}
Run Code Online (Sandbox Code Playgroud)
你的主要问题是double精度非常有限.如果你想要任意精度,你将不得不使用BigDecimal.你要遇到的下一个问题是long,你可以使用的阶乘有限的范围很快就会超过你BigInteger.