VC++中的伪随机数

| 计算机等级 |

【www.tingchehu.com--计算机等级】

为追求真正的随机序列,人们曾采用很多种原始的物理方法用于生成一定范围内满足精度(位数)的均匀分布序列,其缺点在于:速度慢、效率低、需占用大量存储空间且不可重现等。为满足计算机模拟研究的需求,人们转而研究用算法生成模拟各种概率分布的伪随机序列。伪随机数是指用数学递推公式所产生的随机数。从实用的角度看,获取这种数的最简单和最自然的方法是利用计算机语言的函数库提供的随机数发生器。典型情况下,它会输出一个均匀分布在0和1区间内的伪随机变量的值。其中应用的最为广泛、研究最彻底的一个算法即线性同余法。

  线性同余法LCG(Linear Congruence Generator)

  选取足够大的正整数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

本文来源:http://www.tingchehu.com/content-76-8715-1.html