在c ++中生成泊松变量

Bob*_*Bob 5 c++ knuth probability poisson

我实现了这个函数来生成一个泊松随机变量

typedef long unsigned int luint;
luint poisson(luint lambda) {
    double L = exp(-double(lambda));
    luint k = 0;
    double p = 1;
    do {
        k++;
        p *= mrand.rand();
    } while( p > L);
    return (k-1);
}
Run Code Online (Sandbox Code Playgroud)

其中mrand是MersenneTwister随机数生成器.我发现,当我增加lambda时,预期的分布将是错误的,其平均值在750左右饱和.是由于数值近似还是我犯了什么错误?

MSa*_*ers 1

我之前问的另一个问题来看,你似乎也可以近似poisson(750)poisson(375) + poisson(375)