有没有人有一个最喜欢的增强随机数生成器,你能解释一下如何在代码中实现它.我试图让mersenne twister工作,并想知道是否有人偏好其他人之一.
我需要从二项式(n,p)分布生成随机数.
二项式(n,p)随机变量是n个均匀变量的总和,其中概率为1.在伪代码中,x=0; for(i=0; i<n; ++i) x+=(rand()<p?1:0);将生成二项式(n,p).
我需要为小的和非常大的n生成这个,例如n = 10 ^ 6和p = 0.02.是否有任何快速数值算法来生成它?
编辑 -
现在这是我的近似值(以及精确泊松和正态分布的函数) -
public long Binomial(long n, double p) {
// As of now it is an approximation
if (n < 1000) {
long result = 0;
for (int i=0; i<n; ++i)
if (random.NextDouble() < p) result++;
return result;
}
if (n * p < 10) return Poisson(n * p);
else if (n * (1 - p) < 10) return n - Poisson(n * …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个可以有偏见的随机数发生器.例如,假设我想要1-5之间的随机数,概率为:
1:上升20%的时间
2:上升10%的时间
3:上升40%的时间
4:上升25%的时间
5:上升5%的时间
标准库或其他库中是否有可以执行此操作的内容?或者,有没有一种有效的方法来做到这一点?