【发布时间】:2019-07-03 18:18:47
【问题描述】:
目前我有以下代码:
public static int getPoisson(double lambda) {
double l = Math.exp(-lambda);
double p = 1.0;
int k = 0;
do {
k++;
p *= Math.random();
} while (p > l);
return k - 1;
}
我想知道如何修改它,以便在定义的范围内生成 x 个值,即如果 a = 5、b = 10 和 lambda = 6,则生成的所有值都将落在5 到 10。
注意:我可以重载方法,从而接受范围参数,并在循环中调用 getPossion 方法;丢弃任何不符合此范围的内容。但是,我想检查是否有数学定义的方法来实现这一点和/或这种方法是否合适。
编辑:我丢弃“越界”值的方法:
public static int getPoisson(final double min, final double max, final double lambda) {
int k = 0;
do {
k = getPoisson(lambda);
} while (k < min || k > max);
return k;
}
【问题讨论】: