产生一个具有一定概率分布的随机数

在C语言中,可是使用rand()函数产生一个伪随机数。当然如果设置srand(TIME(NULL))那几乎就是随机数了。这个伪随机数的范围是[0,RAND_MAX],RAND_MAX 在stdlib.h文件中定义。嗯,我们这里不管这个,回到正题。

首先假设有3个数,a1,a2,a3, 出现的概率分别为0.1,0.3,0.6。现在需要按它们出现的概率来随机产生。

一个简单的方法是:
1.利用 (double)rand()/RAND_MAX; 产生一个[0,1]到随机数k;
2.利用if语句判断这个数是在上面的那个区间,如[0,0.1),[0.1,0.4),以及[0.4,1.0]。

另一个方法则是利用while循环:
1.产生一个[0,1.0]的随机数 k ,方法同上;
2.利用如下语句:

i = 0;

while(k>ai)
{
   i++;
   k += ai;
}

return ai; 


(未完待续)

评论

此博客中的热门博文

在Ubuntu 16.04上基于OpenBLAS 编译LAPACK

kindle 4(黑)去广告+换屏保

COIN-OR 源码编译安装要点记录