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);
ответ
Вы разбираете результат с BigDecimal обратно в двойное. Если BigDecimal слишком велик, значение просто бесконечно, потому что double может хранить столько данных.
Редактировать: ошибка Infinity также может возникать в некоторой другой точке кода, и ошибка просто распространяется. Просто проверьте наличие нежелательного приведения из BigDecimal в Double.
double res = (Math.pow (r, i)) * (факт (m)/(факт (mi) * fact (i))) * ((Math.pow (n, ni) * fact (i))/fact (n)) Это формаль, который я реализовал, так как вы можете видеть, но он доходит до бесконечности выше 120. Я пробовал его без разбора, он дает мне значения, но для окончательного вычисления его не работает .. любая идея о том, как это сделать кроме как избежать разбора ?. – shravan
Вы используете Math.pow, который «только» вычисляет с двойной точностью. Если вы хотите рассчитать с большими числами, вы используете BigDecimal. Вам нужно преобразовать ваш код, чтобы использовать BigDecimals. Например, вы можете использовать 'BigDecimal powedNumber = new BigDecimal (20) .pow (1000);' to pow 20 на 1000. Результат этого вычисления будет слишком большим, чтобы вписаться в double. Вы можете выполнять другие каллуляции с помощью BigDecimal, например, умножать, делить, плюс ... – Rene8888
Можно ли решить? Что вы хотите сделать? – Neilos
Код только вопросы не одобряются. дать описание ожидаемого поведения и ошибки, которую вы получаете. –
Вы должны добавить намного больше информации. Как то, что вы хотите сделать. – Nitram