随机数产生器.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
随机数产生器

算法设计与分析实验报告实验四 随机数产生器院系: 班级: 计算机科学与技术学号: 姓名: 任课教师: 成绩:湘 潭 大 学 2016年5月实验四 随机数产生器 实验内容设计一个随机数发生器,可以产生分布在任意整数区间[a,b]的随机数序列。二.实验目的1、掌握线性同余法产生随机数的方法;?2、了解计算机中的随机数是如何产生的,以及为什么将随机数称为伪随机数。?三. 算法描述?//随机数类Const unsigned long maxshort = 65536L;Const unsigned long multiplier = 1194211693L;Const unsigned long adder = 12345L;Class RandomNumber{ private: //当前种子 unsigned long randSeed;Public:RandomNumber(unsigned long s = 0);//构造函数,默认值0表示由系统自动产生种子unsigned short Random(unsigned long n);//产生0:n-1之间的随机整数Double fRandom(void);//产生[0,1)之间的随机实数 };函数Random在每次计算时用线性同余式计算新的种子randSeed。它的高16位随机性较好。将randSeed右移16位得到一个0~65535之间的随机整数,然后再将此随机整数映射到0~(n-1)范围内。对于函数fRandom,先用函数Random(maxshort)产生一个0~(maxshort - 1)之间的整型随机序列,将每个整型随机数除以maxshort,就得到[0,1)区间中的随机实数。RandomNumber :: RandomNumber(unsigned long s ) //产生种子{If (s == 0) randSeed = time(0); //用系统时间产生种子Else randSeed = s; //由用户提供种子}Unsigned short RandomNumber :: Random(unsigned long n)//产生0:n-1之间的随机整数{randSeed = multiplier * randSeed + adder;Return (unsigned short )((randSeed 16)%n);}Double RandomNumber :: fRandom(void) //产生[0,1)之间的随机实数{ return Random(maxshort)/double(maxshort);}四. 算法实现数据结构及函数说明?线性同余法产生伪随机数,由线性同余法产生的随机序列a1,a2,.... ,an,...满足a0 = dan = (b*An-1 + c) mod m n = 1,2,...式中b=0,c=0,m=0。d为该随机序列的种子。建立一个随机数类RandomNumber。该类包含一个需要由用户初始化的种子randSeed。给定初始种子后,即可产生相应的随机序列。种子randSeed是一个无符号整型数,可由用户选定也可用系统时间自动产生。函数Random的输入参数n=65536是一个无符号整数型,它返回0到(n - 1)范围内的一个随机整数。函数fRandom返回[0,1)内的一个随机实数。函数Random的输入参数n=65536是一个无符号整数型,它返回0到(n - 1)范围内的一个随机整数。函数fRandom返回[0,1)内的一个随机实数。源程序代码#include stdio.h#include time.hint d;long My_Rand(long a,long c,long m){ return d=(a*d+c)%m;}long gcd1(long m,long n){ long r; while((r=m%n)!=0) { m=n; n=r; } return n;}long gcd(long m){ long i=2; while(gcd1(i,m)!=1) i++; return i;}void main(){ double start,finish; start=clock(); long a,c,m,R; int i,k; int x,y; m=10007; a=gcd(m); c=33; d=time(0); printf(随机数的范围:); scanf(%d %d,x,y); printf(随机数的个数:); scanf(%d,k); for(i=0;ik;i++) { R=rand()%y; if(Rx)printf(%d ,R); if(i%10=9)printf(\n)

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档