Ich habe dieses Stück Code für Calc:Poisson Calc mit hohen faktorielles
public static double CalcPoisson(double m, double u, boolean va)
{
double answer = 0;
if(!va)
{
answer = (Math.exp(-u)* Math.pow(u, m))/(factorial(m));
}
if(va)
{
for(int i = 0; i < m; i++)
{
answer = answer + (Math.exp(-u)* Math.pow(u, i))/(factorial(i));
}
}
return answer;
Und das war meine Methode factorial
public static double factorial (double n)
{
return n == 0 ? 1 : n *factorial(n-1);
}
Problem ist: der Maximalwert 170 zu berechnen .. .i brauchen viel mehr (wie faktorielle von 500)
ich eine neue Methode geschrieben haben:
public static BigDecimal factorial2 (double n)
{
BigDecimal fct = BigDecimal.valueOf(1);
for(int i = 1; i<=n; i++)
{
fct = fct.multiply(BigDecimal.valueOf(i));
}
return fct;
Wie kann ich meine neue faktorielle Methode in meiner "CalcPoisson" Methode verwenden? Problem ist, ich kann nicht mit BigDecimal Doppel teilen ...
Danke für die Hilfe :)
For No One:
ich immer noch diese Codezeile in einer Methode, die CalcPoisson verwendet, im immer noch schlecht mit BigDecimal, ich kann damit nicht umgehen.
The Line:
BigDecimal nenner = CalcPoisson(m, u, false) + (1-p) * CalcPoisson(m, u, true);
Was funktionierte nicht mit 'double'? Alles, einschließlich Ihres Endergebnisses, ist doppelte Genauigkeit, wenn Sie mehr als diesen BigDezimal-Wert benötigen, der in der Mitte Ihrer Gleichung steckt, wird das nicht helfen. – markspace
Problem ist die Methode factorial funktioniert nur bis 170! Die Idee ist also, BigDecimal statt Double zu verwenden. –
ist (1-p) ist BigDecimal? – Kaushal28