この関数を実装して、ポアソン確率変数を生成しました
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);
}
ここで、mrandはMersenneTwister乱数ジェネレーターです。ラムダを増やすと、期待される分布が間違ってしまい、平均が750前後で飽和することがわかります。これは数値近似によるものですか、それとも間違いを犯したのでしょうか。