快速业务通道

ASP.NET中随机数生成及应用

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
编号

摘要

伪随机数在计算机软件设计中有很广泛的用途。本文介绍了伪随机数生成的一般原理,以及利用ASP.NET Framework中提供的Random类及其方法来生成各种不同范围的满足各种要求的随机数。最后结合Web控件表单阐述了ASP.NET中的随机数在软件设计中的应用。

关键词

ASP.NET;伪随机数生成;Web; Random类

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

随机数发生器

在计算机中产生随机数的方法,经常采用下面的公式:

ASP.NET中随机数生成及应用

用这个公式产生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 );
 }
}

ASP.NET中伪随机数生成机制

计算机不可能产生完全随机的数字。所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。

1、VB.NET内建函数

ASP.NET程序可以采用多种编程语言,其默认的程序语言是VB.NET,虽然VB.NET和VB有些相似,但它们的应用环境不一样,编写代码的方法也有所不同。在VB.NET中,如果要使用数学函数,必须通过.NET Framework提供的Math类,它位于System命名空间下,用户可以在代码顶部添加Imports System. Math以便使用这些数学函数。

其中用于产生随机数的函数原型为:Rnd(x),该函数用以产生一个介于0~1之间的单精度随机数。x是产生随机数的种子。如果要从(min, max)这个范围内随机抽取一个数,此时需要用到公式:随机数 = (max - min) * Rnd(x) + min。

伪随机数的选择是从随机种子开始的,为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要。如果选择的随机种子一样则生成的随机序列也相同。一般地,使用同系统时间有关的参数作为随机种子,这也是.net Framework中的随机数发生器默认采用的方法。

2、随机数类System.Random

随机数类System.Random类提供以下方法用于产生各种满足不同要求的随机数,如表1所示:

表1System.Random类提供的各种方法

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号