Ich bin ein gelegten Wahrscheinlichkeit unter Verwendung eines Hypergeometrische Verteilung zu berechnen Tring i im math.stackexchange dazu etwas Hilfe bekommen, aber ich habe Probleme Berechnung dieses in JavaHypergeometrische Verteilung nicht gut funktionieren java
Ich bin kein Experte auf diesem aufweist, i wurde tring es ohne Glück, um herauszufinden, ich kenne das Problem auf meinem Java-Code ist, weil, wenn ich die Formel auf meinem Rechner versuche ich das richtige Ergebnis erhalten whitch 0.364 in diesem Fall ist
Dies ist die Formel
Binomialmodelle wird auf diese Weise berechnet
(K k) = K!/((K - k)! * k!)
Dies ist, wie im diese versuchen, Code in Java zu replizieren
public static void main(String[] args){
BigDecimal[] prob = HyperGeometricDistribution(20,2,50,5);
String _prob = prob[0] + "." + prob[1];
System.out.println(_prob);
}
private static BigDecimal fact(BigDecimal n) {
BigDecimal result = BigDecimal.ONE;
while (!n.equals(BigDecimal.ZERO)) {
result = result.multiply(n);
n = n.subtract(BigDecimal.ONE);
}
return result;
}
private static BigDecimal Binomial(int a, int b) {
return fact(BigDecimal.valueOf(a)).divide(fact(BigDecimal.valueOf(a-b)).multiply(fact(BigDecimal.valueOf(b))), BigDecimal.ROUND_DOWN);
}
// K : Number of Successes in Population
// k : number of Successes in Sample
// N : Population Size
// m : Sample Size
private static BigDecimal[] HyperGeometricDistribution(int K,int k, int N, int m){
return (Binomial(K,k).multiply(Binomial(N-K,m-k))).divideAndRemainder(Binomial(N,m));
}
Diese 0,77 gedruckt wird jedoch die richtige Antwort 0,364 Online Example
ist Ich werde das in Android verwenden, der maximale Wert, den ich in überschreiten werde N ist 3910 Ich muss BigDecimals seit ich verwenden muss 3910 berechnen! und das ist eine riesige Anzahl.
Jede Hilfe ist
geschätzt
Ich musste die "Long" durch "BigInteger" ersetzen, weil ich Probleme mit großen Zahlen hatte, aber jetzt funktioniert alles sehr gut –