这个程序抛出无穷大的m值超过120?..它可以解决吗?

时间:2015-04-09 12:53:07

标签: java arrays markov-chains computation

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);

1 个答案:

答案 0 :(得分:0)

您正在将BigDecimal的结果解析为double。如果BigDecimal太大,则该值只是无限,因为double可以“保存那么多数据。”

编辑:无限错误也可能在代码中的某个其他位置发生,并且错误只会传播。只需检查从BigDecimal到Double的不需要的强制转换。