java泊松分布随机数,C语言生成泊松分布随机数

2010年5月时,在51testing上写过一篇文章,关于C语言实现泊松分布随机。然后,估计能在搜索引擎中对相关的关键字排名处于前面,所以已经收到过多次有网友发email给我询问关于泊松分布的C代码的事情了,这不,这两天又有人问到我了。(其实,我已经将概率论中该忘记的东西都已经忘记了,呵呵。)

这也说明,那篇文章对一些网友有参考价值,所以我重新找到了以前写的那点仿真代码,然后把当时写的关于库存系统仿真的代码整体都放到了Github上了,见:

https://github.com/smilejay/c-cpp/tree/master/inventory-simulation

里面代码比较简陋,望大家有兴趣观赏时发现了bug或者设计的问题,请给我留言,以便我学习提高~

帮一个朋友做管理学科研究生阶段的一个作业,是对库存系统仿真,其中里面零售商的需求是泊松分布的随机数。需要用C语言产生泊松分布的随机数,通过找资料和编程实践,简单的程序写了出来,如下,供参考。

泊松分布随机数的算法如下:

Python

algorithm poisson random number (Knuth):

init:

Let L ← exp(−λ), k ← 0 and p ← 1.

do:

k ← k + 1.

Generate uniform. random number u in [0,1] and let p ← p × u.

while p >= L.

return (k − 1).

1

2

3

4

5

6

7

8

algorithmpoissonrandomnumber(Knuth):

init:

LetL←exp(−λ),k←0andp←1.

do:

k←k+1.

Generateuniform.randomnumberuin[0,1]andletp←p×u.

whilep>=L.

return(k−1).

C语言实现的泊松分布随机数的代码如下:

Python

#include

#include

#include

double U_Random();

int possion();

void main()

{

double u = U_Random();

int p = possion();

printf("%f\n",u);

printf("%d\n",p);

}

int possion() /* 产生一个泊松分布的随机数,Lamda为总体平均数*/

{

int Lambda = 20, k = 0;

long double p = 1.0;

long double l=exp(-Lambda); /* 为了精度,才定义为long double的,exp(-Lambda)是接近0的小数*/

printf("%.15Lf\n",l);

while (p>=l)

{

double u = U_Random();

p *= u;

k++;

}

return k-1;

}

double U_Random() /* 产生一个0~1之间的随机数 */

{

double f;

srand( (unsigned)time( NULL ) );

f = (float)(rand() % 100);

/* printf("%f\n",f); */

return f/100;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

#include

#include

#include

doubleU_Random();

intpossion();

voidmain()

{

doubleu=U_Random();

intp=possion();

printf("%f\n",u);

printf("%d\n",p);

}

intpossion()/*产生一个泊松分布的随机数,Lamda为总体平均数*/

{

intLambda=20,k=0;

longdoublep=1.0;

longdoublel=exp(-Lambda);/*为了精度,才定义为longdouble的,exp(-Lambda)是接近0的小数*/

printf("%.15Lf\n",l);

while(p>=l)

{

doubleu=U_Random();

p*=u;

k++;

}

returnk-1;

}

doubleU_Random()/*产生一个0~1之间的随机数*/

{

doublef;

srand((unsigned)time(NULL));

f=(float)(rand()%100);

/*printf("%f\n",f);*/

returnf/100;

}

参考资料:

关于这个简单的库存仿真的全部代码:https://github.com/smilejay/c-cpp/tree/master/inventory-simulation

最初写的这篇文章:http://www.51testing.com/?uid-225738-action-viewspace-itemid-214306

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值