2014-12-14 20:04:03 +01:00
|
|
|
package mekanism.common.util;
|
|
|
|
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
|
|
import static java.lang.Math.ceil;
|
|
|
|
import static java.lang.Math.sqrt;
|
|
|
|
import static java.lang.Math.exp;
|
|
|
|
import static java.lang.Math.pow;
|
|
|
|
import static java.lang.Math.PI;
|
|
|
|
import static java.lang.Math.E;
|
|
|
|
|
|
|
|
public class StatUtils
|
|
|
|
{
|
|
|
|
public static Random rand = new Random();
|
|
|
|
|
|
|
|
public static int inversePoisson(double mean)
|
|
|
|
{
|
2015-02-19 22:12:28 +01:00
|
|
|
double r = rand.nextDouble()*exp(mean);
|
2014-12-14 20:04:03 +01:00
|
|
|
int m = 0;
|
|
|
|
double p = 1;
|
2015-02-19 22:12:28 +01:00
|
|
|
double stirlingValue = mean*E;
|
|
|
|
double stirlingCoeff = 1/sqrt(2*PI);
|
|
|
|
|
|
|
|
while((p < r) && (m < 3*ceil(mean)))
|
2014-12-14 20:04:03 +01:00
|
|
|
{
|
2015-02-19 22:12:28 +01:00
|
|
|
m++;
|
|
|
|
p += stirlingCoeff/sqrt(m)*pow((stirlingValue/m), m);
|
2014-12-14 20:04:03 +01:00
|
|
|
}
|
2015-02-19 22:12:28 +01:00
|
|
|
|
2014-12-14 20:04:03 +01:00
|
|
|
return m;
|
|
|
|
}
|
|
|
|
}
|