ポアソン乱数生成

一様乱数法による生成で、genrand_res53()が[0,1)の一様乱数に対応する。

int Poisson(double lambda){
int k=0;
lambda=exp(lambda)*(genrand_res53());
while (lambda>1) {
lambda*=(genrand_res53());
k++;
}
return k;
}

しかし、lambdaの値が大きくなると、exp(lambda)が大きくなりすぎて扱えないので、
ログを取った形に直す。
例:lambda=50、exp(lambda)=5.2*10^21

int Poisson(double lambda){
int k=0;
lambda=lambda+log(genrand_res53());
while (lambda>0) {
lambda+= log(genrand_res53());
k++;
}
return k;
}