摘要
伪随机数在计算机软件设计中有很广泛的用途。本文介绍了伪随机数生成的一般原理,以及利用ASP.NET Framework中提供的Random类及其方法来生成各种不同范围的满足各种要求的随机数。最后结合Web控件表单阐述了ASP.NET中的随机数在软件设计中的应用。
关键词
ASP.NET;伪随机数生成;Web; Random类
随机数在软件设计,尤其是在实践环境模拟和测试等领域中得到很广泛的应用。为追求真正的随机序列,人们曾采用很多种原始的物理方法用于生成一定范围内满足精度(位数)的均匀分布序列,其缺点在于:速度慢、效率低、需占用大量存储空间且不可重现等。为满足计算机模拟研究的需求,人们转而研究用算法生成模拟各种概率分布的伪随机序列。伪随机数是指用数学递推公式所产生的随机数。从实用的角度看,获取这种数的最简单和最自然的方法是利用计算机语言的函数库提供的随机数发生器。不同的开发环境提供的生成随机数的函数和方法不一样。典型情况下,它会输出一个均匀分布在0和1区间内的伪随机变量的值。
随机数发生器
在计算机中产生随机数的方法,经常采用下面的公式:
用这个公式产生0~65536的随机数a1,a2,…序列的程序,称为232步长的倍增谐和随机数发生器。其中b、c、d为正整数,d称为由公式所产生的随机序列的种子。
由该公式可以看出,一旦参数b、c、d确定之后,所产生的随机序列也是确定的。这种只在一定程度上满足随机性的序列称为伪随机数。
下面是随机数发生器的一个例子。其中,函数random_seed提供给用户选择随机数的种子,当形式参数d=0时,取系统当前时间作为随机数种子;当d≠0时,就选用d作为种子;函数random在给定种子的基础上,计算新的种子,并产生一个范围为low~high的新的随机数。
#define MULTIPLIER 0x015A4E35L
#define INCREMENT 1
void random_seed( unsigned long d){
if ( d == 0 )seed = time(0);
else seed = d;}
unsigned int random(unsigned long low,unsigned long high)
{
seed = MULTIPLIER * seed + INCREMENT;
return ((seed >>16 )% ( high-low ) + low );
}
}