C语言基础:伪随机数计算机等级考试
文章作者 100test 发表时间 2010:02:04 02:25:07
来源 100Test.Com百考试题网
大家可能很多次讨论过随机数在计算机中怎样产生的问题,在这篇文章中,我会对这个问题进行更深入的探讨,阐述我对这个问题的理解。
首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。
伪随机数并不是假随机数,这里的“伪”是有规律的意思,就是计算机产生的伪随机数既是随机的又是有规律的。怎样理解呢?产生的伪随机数有时遵守一定的规律,有时不遵守任何规律;伪随机数有一部分遵守一定的规律;另一部分不遵守任何规律。比如“世上没有两片形状完全相同的树叶”,这正是点到了事物的特性,即随机性,但是每种树的叶子都有近似的形状,这正是事物的共性,即规律性。从这个角度讲,你大概就会接受这样的事实了:计算机只能产生伪随机数而不能产生绝对随机的随机数。(严格地说,这里的计算机是指由冯诺依曼思想发展起来的电子计算机。而未来的量子计算机有可能产生基于自然规律的不可重现的 “真”随机数)
那么计算机中随机数是怎样产生的呢?有人可能会说,随机数是由“随机种子”产生的。没错,随机种子是用来产生随机数的一个数,在计算机中,这样的一个“随机种子”是一个无符号整形数。那么随机种子是从哪里获得的呢?
下面看这样一个C程序:
//rand01.c
#include
static unsigned int RAND_SEED.
unsigned int random(void)
{
RAND_SEED=(RAND_SEED*123 59)e536.
return(RAND_SEED).
}
void random_start(void)
{
int temp[2].
movedata(0x0040,0x006c,FP_SEG(temp),FP_OFF(temp),4).
RAND_SEED=temp[0].
}
main()
{
unsigned int i,n.
random_start().
for(i=0.i