网上很多。抄一个给你。
Lambda 是 泊松分布随机数 目标平均值,程序里用Lambda=20。
#include
#include
#include
double U_Random(); // 均匀随机数0到1
int possion(int Lambda); // 泊松分布随机数
main()
{
double u;
int p;
int Lambda=20; // 你可以改为你需要的目标平均值
int i;
srand( (unsigned)time( NULL ) ); // 种子
u = U_Random();
// printf("rd 0 to 1: %lf\n",u);
for (i=0;i<10;i++) // 产生10个
{
p = possion(Lambda);
printf("%d ",p);
};
return 0;
}
int possion(int Lambda) /* generate poisson rd,with mean =Lamda */
{
int k = 0;
double p = 1.0;
double l,u;
l=exp(-Lambda); /* exp(-Lambda) is dicimal zero */
// printf("l= %.15lf\n",l);
while (p>=l)
{
u = U_Random();
p *= u;
k++;
}
return k-1;
}
double U_Random() /* 0 to 1 rd */
{
double f;
f = (double)(rand() % 1001);
return f/1000.0;
}