VC++中的伪随机数
为了追求真正的随机序列,人们使用了许多原始的物理方法来产生在一定范围内满足精度(位数)的均匀分布序列。它们的缺点是:速度慢,效率低,存储空间大空,不可复制。为了满足计算机仿真研究的需要,人们转向了通过算法产生模拟各种概率分布的伪随机序列的研究。伪随机数是指通过数学递推公式产生的随机数。从实用的角度来说,获取这个数最简单最自然的方法就是使用计算机语言函数库提供的随机数生成器。通常,它将输出均匀分布在0和1之间的伪随机变量的值。使用最广泛和研究最深入的算法之一是线性同余法。
线性同余LCG(线性同余生成器)
选择一个足够大的正整数M和任意自然数n0,A,B,使用递推公式:
ni+1=(af(ni)+b)mod M i=0,1,…,M-1
生成的数字序列称为同余序列。当函数f(n)是线性函数时,得到线性同余序列:
ni+1=(a*ni+b)mod M i=0,1,…,M-1
下面是用线性同余法生成伪随机数的伪代码:
Random(n,m,seed,a,b)
{
r0 = seed;
for (i = 1;i
0条评论