产生伪随机数的乘同余方法共29页

合集下载

伪随机数生成算法 java

伪随机数生成算法 java

伪随机数生成算法 java在Java编程中,生成伪随机数是一个常见的需求,可以通过使用Java中的Random类来实现。

Random类提供了一种生成伪随机数的方法,可以通过调用nextInt()、nextDouble()等方法来获取不同类型的随机数。

然而,Random类生成的随机数并不是真正意义上的随机数,而是伪随机数,因为它们是通过确定性算法生成的。

因此,如果需要更高质量的随机数,可以使用更复杂的伪随机数生成算法。

在Java中,常见的伪随机数生成算法包括线性同余法、梅森旋转算法、梅森-图尔尼克算法等。

这些算法通过不同的数学计算和操作来生成伪随机数序列,具有不同的随机性和周期性。

以下是一个简单的线性同余法的伪随机数生成算法示例:```javapublic class PseudoRandom {private static final long a = 1664525;private static final long c = 1013904223;private static final long m = (long) Math.pow(2, 32);private long seed;public PseudoRandom(long seed) {this.seed = seed;}public long nextInt() {seed = (a * seed + c) % m;return seed;}public static void main(String[] args) {PseudoRandom pseudoRandom = newPseudoRandom(System.currentTimeMillis());for (int i = 0; i < 10; i++) {System.out.println(pseudoRandom.nextInt());}}}```在上面的示例中,我们使用了线性同余法的伪随机数生成算法,通过不断迭代计算生成随机数序列。

线性乘同余方法

线性乘同余方法
2.3 线性乘同余方法(Linear Congruential Method) 1948年由Lehmer提出的一种产生伪随机数的方法,是最常用的方 法。 1、递推公式:
I n1 (aIn c) modm
其中: I0: 初始值(种子seed) a: 乘法器 (multiplier) c: 增值(additive constant) m: 模数(modulus) mod:取模运算:(aIn+c)除以m后的余数
2.3 线性乘同余方法(Linear Congruential Method)
RANDU随机数产生器:
1961年由IBM提出
I n1 (65539 I n ) mod231
unsigned long seed = 9; float randu() { const unsigned long a = 65539; const unsigned long m = pow(2,31); unsigned long i1; i1 = (a * seed) % m; seed = i1; return (float) i1/float(m);
5、乘数因子a的选择: 1961年,M. Greenberger证明:用线性乘同余方法产生的随机 数序列具有周期m的条件是: 1. c和m为互质数; 2. a-1是质数p的倍数,其中p是a-1和m的共约数; 3. 如果m是4的倍数,a-1也是4的倍数。 例:a=5,c=1,m=16,I0=1 周期=m=16 1,6,15,12,13,2,11,8,9,14,7,4,5,10,3,0,1,6,15, 12,13,2,..
2.3 线性乘同余方法(Linear Congruential Method) for(int i=0; i < 10000; i++) { float x = randu(); float y = randu(); float z = randu(); h1->Fill(x); h2->Fill(x,y); h3->Fill(x,y,z); } pad1->cd(); h1->Draw(); pad2->cd(); h2->Draw(); pad3->cd(); h3->Draw(); }

CC++中如何产生伪随机数

CC++中如何产生伪随机数

CC++中如何产⽣伪随机数 本节主要参考⾃⼀及. 我们知道rand()函数可以⽤来产⽣随机数,但是这不是真正意义上的随机数,是⼀个伪随机数,是根据⼀个数(我们可以称它为种⼦)为基准以某个递推公式推算出来的⼀系列数,当这系列数很⼤的时候,就符合正态公布,从⽽相当于产⽣了随机数,但这不是真正的随机数,当计算机正常开机后,这个种⼦的值是定了的,除⾮你破坏了系统。

1.1 rand() 功能:随机数发⽣器 ⽤法:int rand(void) 所在头⽂件: stdlib.h rand()的内部实现是⽤线性同余法做的,它不是真的随机数,因其周期特别长,故在⼀定的范围⾥可看成是随机的。

rand()返回⼀随机数值的范围在0⾄RAND_MAX 间。

RAND_MAX的范围最少是在32767之间(int)。

⽤unsigned int 双字节是65535,四字节是4294967295的整数范围。

0~RAND_MAX每个数字被选中的机率是相同的。

⽤户未设定随机数种⼦时,系统默认的随机数种⼦为1。

rand()产⽣的是伪随机数字,每次执⾏时是相同的;若要不同,⽤函数srand()初始化它。

1.2 srand() 功能:初始化随机数发⽣器 ⽤法: void srand(unsigned int seed) 所在头⽂件: stdlib.h srand()⽤来设置rand()产⽣随机数时的随机数种⼦。

参数seed必须是个整数,如果每次seed都设相同值,rand()所产⽣的随机数值每次就会⼀样。

1.3 使⽤当前时钟作为随机数种⼦ rand()产⽣的随机数在每次运⾏的时候都是与上⼀次相同的。

若要不同,⽤函数srand()初始化它。

可以利⽤srand((unsigned int) (time(NULL))的⽅法,产⽣不同的随机数种⼦,因为每⼀次运⾏程序的时间是不同的。

1.4 产⽣随机数的⽤法 1)给srand()提供⼀个种⼦,它是⼀个unsigned int类型; 2)调⽤rand(),它会根据提供给srand()的种⼦值返回⼀个随机数(在0到RAND_MAX之间); 3)根据需要多次调⽤rand(),从⽽不间断地得到新的随机数; 4)⽆论什么时候,都可以给srand()提供⼀个新的种⼦,从⽽进⼀步“随机化”rand()的输出结果。

伪随机数生成算法

伪随机数生成算法

伪随机数生成算法伪随机数生成算法是一种应用广泛的数据处理技术,它可以用来产生随机数和随机性结果。

它广泛应用于科学研究、工程设计、生物信息学、通信技术等领域,是大多数数学和计算机算法几乎不可或缺的一种工具。

本文将介绍伪随机数生成算法,包括它的原理、实现步骤和应用场景。

一、伪随机数生成算法的原理伪随机数生成算法是一种算术组合算法,它的核心是将某个“可能的”范围内的数字进行一段分散的处理,这个“可能的”范围可以是随机的范围,也可以是一组规则的范围,比如从一个已知的数学公式中,实现某种规律的随机数字序列。

具体的处理步骤可以用以下数学表达式来描述:X(n+1)=F(Xn)其中Xn表示上一次生成的随机数,F(Xn)是某个特定的数学处理函数,它可以把Xn转化为下一个随机数X(n+1)。

由于X(n+1)和Xn 不相关,因此可以保证X(n+1)是一个“假随机”数,不受任何规律和确定性的影响,即使是一段相同的序列,其中的每个数字都是一个“假随机”数。

二、伪随机数生成算法的实现伪随机数生成算法的实现有三个步骤:初始化种子,选择合适的处理函数,实现步骤2的结果。

1.始化种子:初始化种子也叫做随机种子,它是一个用来初始化伪随机数序列的数字,它可以随着时间改变,也可以由用户输入。

2.择合适的处理函数:选择合适的处理函数是指根据种子的值,构建一个能够将每一次迭代的输出和输入转化为不同的数字的处理函数。

处理函数比如通过使用一个固定的函数进行计算,或者随机数的序列可以直接和处理函数拼接实现,或者使用一个特定的规则对随机数的序列进行改变,这些都是可以实现的方式。

3.现步骤2的结果:最后,根据步骤2中选择的处理函数,通过重复迭代,生成合乎要求的随机序列。

三、伪随机数生成算法的应用伪随机数生成算法的应用非常广泛,它可以用在各种计算机技术中,如密码学、密钥管理、压缩算法、数据编码、计算机图形、网络安全、机器学习、游戏开发、计算机视觉、科学研究等等。

伪随机数的生成

伪随机数的生成

<cstdlib>头文件定义了一个生成随机整数的函数rand()。

Rand()函数把一个随机整数返回为int类型。

Rand()函数返回的值是从0到RAND_MAX之间的一个值。

RAND_MAX是一个在<cstdlib>中定义的符号。

在代码中使用RAND_MAX时,编译器会用一个整数值代替它。

在一些系统中,它表示值0x7fff,在另外一些系统中,它有不同的值,它至多可以是0x7fffffff。

数字序列的随机化:<cstdlib>中定义的srand()函数,例:std::srand(13);srand()函数的变元必须是unsigned int 类型的值,这条语句将会使rand()产生一个与默认不同的序列。

<ctime>标准库头文件定义了几个与日期和时间相关的函数。

例:time()函数,因为这就是获得随机种子值的方式。

Time()函数返回自从1970年1月1日以来过去的秒数。

伪随机数的产生:例:假定希望随机整数在0到10之间,就可以从rand()返回的值中得到如下结果:Const int limit=11;Int random_value=static_cast<int>((limit*static_cast<long>(std::rand()))/(RAND_MAX+1L));这里把0到RAND_MAX的取值范围分成limit部分,在给定的部分中,rand()返回的所有值都在0到limit-1的范围内。

具体方法是,把limit乘以rand()/(RAND_MAX+1L),除以(RAND_MAX+1L)而不是RAND_MAX(),是为了处理rand()正好返回RAND_MAX的情况。

如果除以RAND_MAX,结果就是limit,而不是limit-1。

如果希望随机值在1和某个上限之间,而不是下限为0,就应使用下面的代码:Const int limit=100;Intrandom_value=static_cast<int>(1L+(limit*static_cast<long>(std::rand()))/(RAND_MAX+1L));这里使用与前面相同的表达式生成0到limit-1之间的值,然后给它加1,得到1到limit之间的值。

随机数的定义及产生方法.

随机数的定义及产生方法.

将伪随机数序列ξ1,ξ2…,ξn从小至大重新排列 n 1 2 0, n 1 1,则由δ(n)的定义,容易证明 并令 0 i i (n) max | i |, | i1 | n n 0 x 1 很明显,对于固定的n,δ(n)的值越小越好。它是 描述伪随机数序列均匀程度的基本量。对于任意随机 数序列,均有如下不等式成立: 1 (n) 2n 1 当 ( n) 时,所对应的伪随机数序列为最佳分) ai
i 1 s
其中P(· )表示事件· 发生的概率。反之,如果随机 变量序列ξ1, ξ2…对于任意自然数s,由s个元素所组成 的s维空间上的点(ξn+1,…ξn+s)在Gs上均匀分布,则 它们是随机数序列。 由于随机数在蒙特卡罗方法中所处的特殊地位, 它们虽然也属于由具有已知分布的总体中产生简单子 样的问题,但就产生方法而言,却有着本质上的差别。
nk T ( n )
对于给定的初始值ξ1,确定ξn+1,n=1,2…
2) 伪随机数存在的两个问题
a) 用数学方法产生的随机数,存在两个问题: 递推公式和初始值ξ1,ξ2…,ξk确定后,整个随机数序 列便被唯一确定。不满足随机数相互独立的要求。 由于随机数序列是由递推公式确定的,而在计算机上 所能表示的[0,1]上的数又是有限的,因此,这种方 法产生的随机数序列就不可能不出现无限重复。一旦 出现这样的n',n″ (n'< n″ ),使得下面等式成立: ni ni i 1,2,, k 随机数序列便出现了周期性的循环现象。对于 k=1的 情况,只要有一个随机数重复,其后面的随机数全部 重复,这与随机数的要求是不相符的。
由于随机数在蒙特卡罗方法中占有极其重要的位 置,我们用专门的符号ξ表示。由随机数序列的定义可 知,ξ1,ξ2,…是相互独立且具有相同单位均匀分布的 随机数序列。也就是说,独立性、均匀性是随机数必 备的两个特点。 随机数具有非常重要的性质:对于任意自然数s, 由s个随机数组成的s维空间上的点(ξn+1,ξn+2,…ξn+s)在s 维空间的单位立方体Gs上均匀分布,即对任意的ai, 0 ai 1 , i 1,2,, s 如下等式成立:

第2章 伪随机数的产生

第2章 伪随机数的产生

0
2
x 24
1

ln U
21
四.逆变法与其它分布随机数的产生(6)
思考1:
爱尔朗(Erlang)分布是m个负指数分布的 和。设 Y1 , Y2 ,Ym 为负指数分布,则
X Y1 Y2 Ym 为Erlang分布。试设计
其随机数的产生。
22
四.逆变法与其它分布随机数的产生(6)
Answer:
II. A 5, S 1
0
III. A 3, S 2
0
S {2, 6, 2, 6, ...}
8
二.产生U(0,1)的乘同余法(4)
3. 计算举例
若想产生U(0,1),则令 S / M 即可。
i i
I. A 3, S 1
0
{1 / 16, 3 / 16, 9 / 16,11 / 16, ...}
一般n取12,则:
z

i 1
12
y i 6 N 0,1
若想产生服从一般正态分布 的随机数 x,则只需产生 z N (0,1) ,再按公式
2
N ( , )
x z
即可获得。
15
四.逆变法与其它分布随机数的产生(1)
1. 逆变法
密度函数
U (0,1)
分布函数
f ( x)
L
初始参数取值:M 2 , 4 k + 1 ,C与M互为 A 质数,则可以获得最长的随机数序列长度为 2
L
上例中,若M=16,A=5,C=3,则产生的随机 整数序列?
10
三.正态分布N(0,1)的产生(1)
f ( x) N (0,1)

伪随机数生成算法及比较

伪随机数生成算法及比较
[ 关键词 ] Monte2Carlo 方法 ; 伪随机数 ; 同余 [ 中图分类号 ] TP391 [ 文献标识码 ] : A
在计算机上用数学的方法产生随机数列是目前 通用的方法 ,它的特点是占用的内存少 ,速度快 . 用数学方法产生的随机数列是根据确定的算法 推算出来的 ,严格说来并不是随机的 ,因此一般称用 数学方法产生的随机数列为伪随机数列 . 不过只要 用数学公式产生出来的伪随机数列通过统计检验符 合一些统计要求 , 如均匀性 、 抽样的随机性等 , 也就 是说只要具有真正随机数列的一些统计特征 , 就可 以把伪随机数列当作真正的随机数列使用
伪随机数生成算法及比较
郑 列 , 宋正义
( 湖北工业大学理学院 , 湖北 武汉 430068) [摘 要 ] 讨论了用数学方法快速产生随机数的方法 . 运用 Monte2Carlo 方法设计数学实验 ,理论分析和实验
结果表明 : 比较好的算法是同余法 ,而其中最好的算法是混合同余法和乘同余法 .
图 1 积分值 s 的几何表示图
如果在图 1 所示的单位正方形内均匀地投点 (x , y ) , 则该随机点落入曲线 y = g ( x ) 下阴影的概 率为 p = P{ y ≤ g ( x ) } =
∫ ∫
0 0
1
g( x)
d yd x =
g ( x ) d s = s. ∫
0
1
( 10 )
由此想法构造计算定积分的投点模型 . (i, 向正方形 0 ≤ x ≤1 ,0 ≤ y ≤1 内均匀投点 ξ η ηi 是相互独立的均匀随机数列 , 第 i 次试验成 , i, i) ξ ξ ηi ) 落入 A 中 , 也就是满足ηi ≤g ( ξ 功 ,即 ( i , i ) , 若每 次成功的概率为 p , 进行 n 次试验成功了 k 次 ,则由 大数定理知

c语言伪随机数生成算法

c语言伪随机数生成算法

c语言伪随机数生成算法C语言中常用的伪随机数生成算法包括线性同余发生器、梅森旋转算法和龙模算法等。

1. 线性同余法:线性同余发生器是一种基于线性递归的伪随机数生成器。

其算法基本原理是将当前数值与一个常数a相乘再加上一个常数c,再对m取模,得到下一个数值。

具体伪代码如下:seed = 设置初始种子a = 设置常数ac = 设置常数cm = 设置常数mnext = (seed * a + c) % mseed = next2. 梅森旋转算法:梅森旋转算法是一种基于循环移位的伪随机数生成算法,它利用梅森素数进行计算。

具体伪代码如下:state = 种子数W = 计算梅森素数function generateRandomNumber():if state < W:state = 计算下一个数else:state = 计算下一个数return state3. 龙模算法:龙模算法是一种结合线性同余发生器和移位发生器的伪随机数生成算法。

具体伪代码如下:state = 初始种子a = 设置常数ac = 设置常数cm = 设置常数mw = 设置常数wfunction generateRandomNumber():state = (state * a + c) % mrandomBits = state >> wstate = ((state & 0xFFFFFFFF) << (32-w)) randomBitsreturn randomBits需要注意的是,这些算法都是伪随机数生成算法,因为它们的结果是通过确定性的计算得到的,并不是真正的随机数。

两种常见的伪随机数算法

两种常见的伪随机数算法

两种常见的伪随机数算法伪随机数是计算机生成的一系列看似随机的数字序列。

虽然伪随机数并不是真正的随机数,但它们的使用仍然非常广泛,并且在计算机科学和密码学等领域都有重要的应用。

在本文中,我将介绍两种常见的伪随机数算法:线性同余生成器和梅森旋转算法。

1. 线性同余生成器(Linear Congruential Generator,LCG):线性同余生成器是一种简单的伪随机数生成器,它的计算公式为:X_{n+1} = (a * X_n + c) mod m其中,X_n是当前伪随机数,X_{n+1}是下一个伪随机数,a、c和m是预先设定的常数。

LCG算法的优点是简单易实现,并且具有较好的随机性。

通过选择合适的参数值,它可以产生高质量的伪随机数。

然而,LCG算法也有一些缺点。

当参数选择不当时,会导致周期较短或重复出现相同的伪随机数序列。

此外,在密码学等关键领域中,LCG算法的安全性较低,易受到攻击。

2. 梅森旋转算法(Mersenne Twister):梅森旋转算法通过一个大型的位向量来保存当前状态,并通过一系列数学计算来生成下一个伪随机数。

为了提高性能,它使用了位操作和快速模运算等技术。

梅森旋转算法在实践中表现出色,具有较好的均匀性、分布特性和随机性。

目前,它广泛应用于计算机图形学、模拟与建模、游戏开发和密码学等领域。

总结:线性同余生成器和梅森旋转算法是两种常见的伪随机数生成算法。

线性同余生成器简单易实现,但有一定的局限性。

梅森旋转算法复杂、高效,并具有优秀的随机性能。

在选择伪随机数算法时,应根据具体应用需求和安全性要求进行评估和选择。

同时,为了增加随机性,可以采用多种算法的组合或使用更复杂的算法。

伪随机数生成原理

伪随机数生成原理

伪随机数生成原理
伪随机数生成原理是指通过一定的算法和种子,生成看似随机的数字序列。

这种序列与真正的随机序列有所不同,因为它们是通过计算机程序生成的。

在实际应用中,伪随机数可以用于密码学、模拟、游戏等领域。

伪随机数生成算法通常包括线性同余法、梅森旋转算法、拉格朗日插值法等。

其中,线性同余法是最简单的算法,通过如下公式生成: X(n+1) = (a * X(n) + c) mod m
其中,a、c、m为常量,X(n)为上一个随机数种子,X(n+1)为新生成的随机数种子。

在实际应用中,伪随机数生成原理的安全性和随机性都受到极大的关注。

因此,需要严格控制种子值的生成和算法的选择,以确保生成的随机数序列不易被猜测和攻破。

同时,还需要对生成的随机数序列进行统计分析,以检验其随机性和分布情况。

总之,伪随机数生成原理是计算机科学中一个重要的概念,它涉及到许多领域的应用和研究。

在实际应用中,我们需要理解伪随机数生成原理的基本原理和技术,以便更好地应用和优化算法。

- 1 -。

c++伪随机数生成算法

c++伪随机数生成算法

c++伪随机数生成算法
C++是目前最流行的编程语言之一,为了更好地实现某类计算机程序,需要大量的伪
随机数据,C++能提供这种非常方便有效的伪随机数生成算法。

C++中提供了不同的伪随机数生成算法,如随机数生成器(RNG)和随机数引擎(RNG Engines),可以利用它们来生成一定范围内的随机数。

其中,随机数生成器是生成伪随
机数的最常用的方法,例如srand(),rand(),随机数引擎是一种更安全的伪随机数生成
算法,而C++11中提供的随机数引擎则要比srand,rand更安全。

随机数引擎可以利用一
些种子数来生成随机数,这样可以保证同样的输入生成的随机数也都是相同一类的。

C++提供的另一种伪随机数算法是mtrand随机数生成器,也称作Mersenne Twister,它是一个最古老但又最受欢迎的、被广泛应用的伪随机数生成算法。

其主要原理是,根据
一定的状态判断算法,使用一个称为“状态向量”的算法,从中可以生成有规律的随机数,同时它的抗重复性也很好,而且存在初始状态恢复机制,因此具有更高的安全性和性能。

最后,C++还提供了线性同余伪随机数生成器,它具有时间复杂度低、并发执行效率高、并发安全性强等特点,与其它伪随机数生成算法相比,它也拥有更加轻巧、快速的性能。

总之,C++提供了多种不同的伪随机数生成算法,比如随机数生成器、随机数引擎以
及mtrand随机数生成器,以及线性同余伪随机数生成器,它们的性能各有特色,可以根
据实际应用场景选择合适的伪随机数生成算法,以获得更为理想的性能和性能。

第2章 伪随机数的产生

第2章 伪随机数的产生
9-5
二、乘同余法产生0-1均匀 乘同余法产生 均匀 分布的伪随机数
例子: 例子:L=6,M=64,A=13,S0=1,可计算得 , 之间非重复长度达到2 到1~M之间非重复长度达到 4=16的均 之间非重复长度达到 的均 匀分布伪随机序列。 匀分布伪随机序列。 {1,13,41,21,17,29,57,37,33,45,9,53,49,61 ,25,5,1}
9-14
五、C#中随机数的产生 中随机数的产生
实例2 实例2: 产生一个随机数组 int[] int[10]; int[] arr = new int[10]; int i; //初始化数组 //初始化数组 for (i = 0; i < 10; i++) {arr[i] = i;} //随机数 //随机数 Random(); Random ra = new Random(); j---) for (int j = 9; j >=0; j--) { int address = ra.Next(j); int tmp = arr[address]; arr[address] = arr[j]; arr[j] = tmp; }
9-6
二、乘同余法产生0-1均匀 乘同余法产生 均匀 分布的伪随机数
4. 混合同余法 可产生比上述方法更长的服从均匀分布的 随机数序列。 随机数序列。 Sk+1=(ASk+C) mod (M) ( ) 数论理论可证明:对于模数M=2L,当 数论理论可证明:对于模数 A=4k+1(k为正整数)且C、M互质时,可 为正整数) 互质时, ( 为正整数 、 互质时 以获得最长随机数序列长度为2 以获得最长随机数序列长度为 L。
9-11
四、产生其他内部随机数的 逆变法

线性同余 产生伪随机数

线性同余 产生伪随机数

自己领悟把一.计算机中随机数的产生现在,在计算机,用来产生随机数的算法是“线性同余”法。

所谓线性同余,其实就是下面两个式子。

假设I就是一个随机数的序列,Ij+1与Ij的关系如下:Ij+1 =Ij * a+c (mod m)或是Ij+1 =Ij *a (mod m),其中,不妨取a=16807,m=2147483647,以为一常数。

写个简单的程序就是:long r;void scand( long v)//初始化随机种子数{r = v;}long rand()//产生随机数{r = (r*a + c)%m;//a,c,m为常数return r;}再看一下稍复杂一点的:(Random () 的Borland 的实现)long long RandSeed = #### ;unsigned long Random(long max){long long x ;double i ;unsigned long final ;x = 0xffffffff;x += 1 ;RandSeed *= ((long long)134775813);RandSeed += 1 ;RandSeed = RandSeed % x ;i = ((double)RandSeed) / (double)0xffffffff ;final = (long) (max * i) ;return (unsigned long)final;}二.计算机产生的随机数不是真的随机数[引:]我们建立了真正调用伪随机数生成器的random()。

但什么是伪随机数生成器?假定需要生成介于 1 和10 之间的随机数,每一个数出现的几率都是一样的。

理想情况下,应生成0 到 1 之间的一个值,不考虑以前值,这个范围中的每一个值出现的几率都是一样的,然后再将该值乘以10。

请注意,在0 和1 之间有无穷多个值,而计算机不能提供这样的精度。

为了编写代码来实现类似于前面提到的算法,常见情况下,伪随机数生成器生成0 到N 之间的一个整数,返回的整数再除以N。

用C语言产生伪随机数的方法总结

用C语言产生伪随机数的方法总结

标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数:函数一:int rand(void);从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。

函数二:void srand(unsigned seed);参数seed是rand()的种子,用来初始化rand()的起始值。

可以认为rand()在每次被调用的时候,它会查看:1)如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。

2)如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。

根据上面的第一点我们可以得出:1)如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。

2)否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得的值。

3)如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。

举几个例子,假设我们要取得0~6之间的随机整数(不含6本身):例一,不指定seed:for(int i=0;i<10;i++){ran_num=rand() % 6;cout<<ran_num<<" ";}每次运行都将输出:5 5 4 4 5 4 0 0 4 2例二,指定seed为定值1:srand(1);for(int i=0;i<10;i++){ran_num=rand() % 6;cout<<ran_num<<" ";}每次运行都将输出:5 5 4 4 5 4 0 0 4 2跟例子一的结果完全一样。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档