進出口特林在math.stackexchange來計算這個使用超幾何分佈,我得到一些幫助一個probabilty但我有問題,在Java計算這個超幾何分佈都不盡如人意的Java
我不是這方面的專家,我一直特林沒有運氣來弄明白,我知道這個問題是我的Java代碼,因爲當我嘗試在我的計算公式,我得到正確的結果whitch在這種情況下
這是公式
是0.364二項式計算這樣
(K k) = K!/((K - k)! * k!)
這是IM如何試圖在Java代碼中複製這種
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));
}
這將打印0.77然而正確的答案是0.364 Online Example
我將在Android中使用這個,我將通過的最大值N是3910我需要使用BigDecimals,因爲我需要計算3910!這是一個龐大的數字。
任何幫助理解
我不得不用'BigInteger'替換'long',因爲我遇到了大數目的問題,但是現在一切都很順利,非常感謝 –