随机数产生器

2018-11-22 10:42

算法设计与分析实验报告

实验四随机数产生器

院系:

级: 学号: 姓名

: 任课教师: 成

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 ) //产生种子 {

2

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); }

四. 算法实现

1.数据结构及函数说明

线性同余法产生伪随机数,由线性同余法产生的随机序列a1,a2,.... ,an,...满足

a0 = d

an = (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)内的一个随机实数。

2.源程序代码

#include #include int d;

long My_Rand(long a,long c,long m) {

3

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(\

4


随机数产生器.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:四年级算二十四点比赛的试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: