for(int i=n+1;i<=m;i++){
double r = (lm/mu);
// double res = (Math.pow(r, i))*(fact(m)/(fact(m-i)*fact(i)))*((Math.pow(n, n-i)*fact(i))/fact(n)) formulae
BigDecimal lr= new BigDecimal(Math.pow(r, i));
BigDecimal fnum = new BigDecimal(factorial(m));
BigDecimal fden1 = new BigDecimal(factorial(m-i));
BigDecimal fden2 = new BigDecimal(factorial(i));
fden1=fden1.multiply(fden2);
fnum=fnum.divide(fden1);
lr=lr.multiply(fnum);
BigDecimal nden = new BigDecimal(factorial(n));
BigDecimal inum = new BigDecimal(factorial(i));
BigDecimal mnum = new BigDecimal(Math.pow(n, n-i));
mnum = mnum.multiply(inum);
mnum = mnum.divide(nden);
lr = lr.multiply(mnum);
ssum2 = ssum2.add(lr);
sum2=Double.parseDouble(format(ssum2,40));
}
System.out.println("Total 2 is"+sum2);
答案 0 :(得分:0)
您正在将BigDecimal的结果解析为double。如果BigDecimal太大,则该值只是无限,因为double可以“保存那么多数据。”
编辑:无限错误也可能在代码中的某个其他位置发生,并且错误只会传播。只需检查从BigDecimal到Double的不需要的强制转换。