用C语言的rand()和srand()产生伪随机数的方法总结
- 格式:pdf
- 大小:59.69 KB
- 文档页数:3
c语言srand函数用法与随机数有关的两个函数,srand() 和 rand(),这两个函数都包含"stdlib.h"头文件里srand()函数是随机数发生器,使得每轮产生的随机数列都不相同。
rand()函数产生随机数,返回一个[0,RAND_ MAX]间的随机整数。
( RAND_ MAX的值在"stdlib.h"中有定义。
)int rand():返回值为随机值,参数为空,通过 rand 函数就会产生一个随机数。
void srand(unsigned int seed):返回值为空,就是设置随机种子的,当我们不设置随机种子的时候,默认设置的种子为1,也就是srand(1)。
使用rand()时,如果不设定随机数序列标签则只会得到重复的随机数序列,其叫做伪随机数。
原因是种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的srand()怎样控制rand()的??int seed;srand(seed);rand();seed是种子srand(seed)为rand()产生种子rand()产生随机数返回值就是随机数可以调用很多次每次值都不同seed的作用:srand函数的作用是根据参数seed,设置一个随机起始点,而rand函数根据这个起始点,发生随机数序列。
默认的随机种子为1。
如果随机种子一样,rand函数所发生的随机序列也一样。
因此,为使每次程序运行都能发生不同的随机序列,每次都应发生一个不同的种子参数。
如下代码:#include <stdio.h>#include <stdlib.h>int main(){int a = rand();printf("%d\n",a);return 0;}怎么解决呢??它需要一个 unsigned int 类型的参数。
c++生成随机数的方法在C++中生成随机数有多种方法,下面我将从多个角度全面介绍其中的几种常用方法。
1. 使用标准库函数:C++标准库提供了一个随机数生成器类`std::random_device`和一个随机数引擎类`std::default_random_engine`,可以通过以下步骤生成随机数:cpp.#include <random>。
#include <iostream>。
int main() {。
std::random_device rd; // 用于获得种子。
std::default_random_engine engine(rd()); // 使用种子初始化随机数引擎。
std::uniform_int_distribution<int> dist(1, 100); // 定义随机数范围。
int random_num = dist(engine); // 生成随机数。
std::cout << "随机数," << random_num <<std::endl;return 0;}。
这段代码使用了`std::random_device`获取种子,`std::default_random_engine`作为随机数引擎,`std::uniform_int_distribution`定义了随机数的范围。
通过调用`dist(engine)`生成随机数。
2. 使用C库函数:C语言中的`rand()`函数也可以在C++中使用。
`rand()`函数生成的是伪随机数,可以通过设置随机数种子`srand()`来改变生成的随机数序列。
以下是一个示例:cpp.#include <cstdlib>。
#include <ctime>。
#include <iostream>。
int main() {。
rand的用法-回复【rand的用法】是非常常见且重要的编程函数,用于生成随机数。
在许多编程语言中,rand函数用来生成一个在一定范围内的随机整数或浮点数。
本文将详细介绍rand函数的使用方式,并深入探讨其应用场景和注意事项。
rand函数的基本用法是生成一个0到RAND_MAX之间的伪随机整数。
其中RAND_MAX是一个常量,表示一个整数的最大可能值,通常是2的N次方减1(N是机器中int类型的比特数)。
下面是一个简单的例子,展示了rand函数的基本用法:include <iostream>include <cstdlib>include <ctime>int main() {srand(time(0)); 初始化随机数种子,将其设置为当前时间for (int i = 0; i < 10; i++) {int randomNum = rand();std::cout << randomNum << std::endl;}return 0;}上述代码使用了C++标准库中的iostream、cstdlib和ctime库。
其中,cstdlib库包含了rand函数的定义,ctime库用于初始化随机数种子。
srand函数的参数是一个整数,通常将其设置为当前时间,这样可以保证每次运行程序时,生成的随机数序列是不同的。
接下来的for循环中,生成了10个随机数,并将其打印在屏幕上。
rand函数的返回值是一个整数,它的取值范围是0到RAND_MAX,但并不是所有的随机数都具有相等的概率。
为了生成指定范围内的随机数,可以使用取余运算符来限制随机数的范围。
例如,要生成1到100之间的随机整数,可以使用以下方式:int randomNumber = rand() 100 + 1;上述代码中,rand() 100将生成一个0到99之间的整数,加1后得到1到100之间的整数。
1-0:Microsoft VC++产生随机数的原理:Srand ( )和Rand( )函数。
它本质上是利用线性同余法,y=ax+b(mod m)。
其中a,b,m都是常数。
因此rand的产生决定于x,x被称为Seed。
Seed需要程序中设定,一般情况下取系统时间作为种子。
它产生的随机数之间的相关性很小,取值范围是0—32767(int),即双字节(16位数),若用unsigned int 双字节是65535,四字节是4294967295,一般可以满足要求。
1-1:线性同余法:其中M是模数,A是乘数,C是增量,为初始值,当C=0时,称此算法为乘同余法;若C ≠0,则称算法为混合同余法,当C取不为零的适当数值时,有一些优点,但优点并不突出,故常取C=0。
模M大小是发生器周期长短的主要标志,常见有M为素数,取A为M的原根,则周期T=M-1。
例如:a=1220703125a=32719 (程序中用此组数)a=16807代码:void main( ){const int n=100;double a=32719,m=1,f[n+1],g[n],seed;m=pow(2,31);cout<<"设置m值为"<<m-1<<endl;cout<<"输入种子"<<endl; //输入种子cin>>seed;f[0]=seed;for(int i=1;i<=n;i++) //线性同余法生成随机数{f[i]=fmod((a*f[i-1]),(m-1));g[i-1]=f[i]/(m-1);cout.setf(ios::fixed);cout.precision(6); //设置输出精度cout<<i<<" "<<'\t'<<g[i-1]<<endl;}}结果分析:统计数据的平均值为:0.485653统计数据的方差为:0.3205761-2:人字映射递推公式就是有名的混沌映射中的“人字映射”或称“帐篷映射”,它的非周期轨道点的分布密度函数:人字映射与线性同余法结合,可产生统计性质优良的均匀随机数。
c语言均匀分布随机数均匀分布随机数是指在一定范围内生成的随机数满足均匀分布的特性。
在C语言中,我们可以使用rand()函数来生成随机数,但是它只能生成均匀分布的伪随机数。
为了使生成的随机数在一定范围内均匀分布,我们需要对生成的随机数进行适当的处理。
在C语言中,我们可以通过以下方法生成均匀分布的随机数:1. 设定随机数的范围:首先,我们需要确定生成随机数的范围。
可以使用srand()函数来设定随机数的种子,然后利用rand()函数生成随机数。
2. 计算随机数的均匀分布间隔:根据生成随机数的范围,我们可以计算出每个间隔的大小。
例如,如果我们希望生成0到100之间的随机数,可以将范围分为10个间隔,每个间隔的大小为10。
3. 生成均匀分布的随机数:利用rand()函数生成的随机数是0到RAND_MAX之间的整数。
我们可以通过将生成的随机数除以每个间隔的大小,并取整来得到在每个间隔内的随机数。
下面是一个示例代码,用于生成0到100之间的均匀分布的随机数:```#include <stdio.h>#include <stdlib.h>#include <time.h>int main() {int range = 100; // 随机数的范围int intervals = 10; // 间隔的个数int intervalSize = range / intervals; // 间隔的大小srand(time(0)); // 设置随机数的种子for (int i = 0; i < 10; i++) {int randomNumber = rand() / intervalSize; // 生成均匀分布的随机数printf("%d ", randomNumber * intervalSize); // 输出随机数}return 0;}```运行上述代码,我们可以得到10个在0到100之间均匀分布的随机数。
c++rand函数C++是一种广泛使用的编程语言,用于开发各种应用程序和系统软件。
C++中的rand函数是一个非常有用的函数,可以生成随机数字。
在这篇文章中,我们将介绍C++中的rand函数及其用法。
rand函数是C++中的一个库函数,用于生成伪随机数。
它的函数原型如下:int rand(void);该函数返回一个整数,这个整数的取值范围在0至RAND_MAX之间。
RAND_MAX是一个常量,它定义了可生成的最大随机数。
使用rand函数时,需要在程序中包含头文件cstdlib。
下面是一个简单的示例程序:#include <iostream>#include <cstdlib>using namespace std;int main(){int r = rand();cout << "随机数是:" << r << endl;return 0;}在上面的程序中,我们使用rand函数生成一个随机数,并将其打印到屏幕上。
注意,我们必须使用头文件cstdlib来包含rand函数。
rand函数不仅可以生成整数,也可以生成小数。
我们可以使用double类型来接收rand函数的返回值,然后进行转换。
下面是一个示例程序:#include <iostream>#include <cstdlib>#include <ctime>using namespace std;int main(){srand((unsigned) time(NULL));double r = (double)rand() / RAND_MAX;cout << "随机数是:" << r << endl;return 0;}在上面的程序中,我们使用了srand函数来为rand函数提供种子值。
c语言中的rand()函数rand()函数是C语言中的一个库函数,用于生成一个随机数。
这个函数需要设置一个种子来确定生成的随机数序列。
在C语言中,使用srand()函数来设置种子,如果不设置种子,则默认使用系统时钟作为种子。
当需要多次调用rand()函数生成不同的随机数时,应该在程序中设置一个固定的种子。
```cint rand(void);```该函数返回一个介于0和RAND_MAX(一个定义为最大值的编译时常量)之间的整数随机数。
例如,下面的代码生成一个随机数:```c#include <stdio.h>#include <stdlib.h>#include <time.h>在这个例子中,我们使用srand()函数设置种子,time(NULL)返回当前时间的秒数。
这样每次运行程序需要生成不同的随机数时,种子都会不同,因此生成的随机数也会不同。
rand()函数的内部实现是生成一个线性同余的伪随机数序列。
每次调用函数时,该序列的下一个数字被计算出来。
为了增加随机性,常常使用时间、进程id、线程id等系统变量作为种子,从而使每轮生成的随机数序列尽量接近自然随机数的特性。
当需要生成一定范围内的随机数时,我们可以使用取余的方式获取所需的随机数。
例如,下面的代码生成1到100之间的随机数:这个程序中,我们生成一个介于0到99之间的随机数,然后加上1,得到一个介于1到100之间的随机数。
总之,rand()函数是C语言中一个常用的函数,用于生成伪随机数。
在使用rand()函数时,需要根据场景设置不同的种子,以使生成的随机数尽量接近自然随机数的特性。
rand函数生成随机数
Rand函数是C语言中的一个标准库函数,可以用来生成伪随机数。
在使用Rand函数的时候,需要用srand函数来为Rand函数设置一个种子来保证生成的随机数的唯一性。
Rand函数的返回值是一个整型值,可以使用模运算来控制生成的随机数的范围。
比如,如果要生成0~99之间的随机数,需要用Rand函数生成一个大于等于0小于等于RAND_MAX的随机数,然后用模运算将其限制在0~99之间。
Rand函数的使用场景很广泛,比如在游戏开发中用来生成随机的游戏地图,或者在密码学中用来生成随机的密钥。
由于Rand函数生成的随机数是伪随机数,因此在一定程度上可以保证安全性和随机性。
但是,为了保证生成的随机数的质量和熵,需要选取和设置合适的种子和模数。
除了Rand函数之外,还有其他的随机数生成算法,比如线性同余发生器、梅森旋转算法等。
这些算法的优劣取决于生成的随机数的分布情况、周期、速度和复杂度等因素。
总之,Rand函数是一种常用的生成随机数的方法,通过合理的设置种
子和模数可以生成高质量的随机数。
在使用随机数的时候,需要注意随机数的唯一性和安全性问题。
rand函数c语言c语言中rand函数的使用:rand函数是包含在stdlib.h头文件里的一个产生随机数的函数,使用方法是rand()%(n-m+1)+m,这个式子表示产生[m,n]范围内的随机数。
因为,对于任意数,0<= rand()%(n-m+1)<= n-m,----->,0+m<= rand()%(n- m+ 1)+ m<= (n- m)+ m。
就比如你要生成[0,69]范围内的随机数,就要写成rand()%70 => rand%(69+ 1)+ 0,这里的69就相当于rand()%((69- 0+ 1+ 0)。
#include <stdio.h>#include <stdlib.h>#include <time.h>int main(){int i, n;n = 5;/* 初始化随机数发生器 */srand(time(NULL)); //随机种子,获得不同的随机数/* 输出 0 到 69 之间的 5 个随机数 */for( i = 0 ; i < n ; i++ ) {printf("%d\n", rand() % 70);}return(0);}注意这里的srand()函数是随机数发生器,void srand(unsigned int seed):返回值为空,就是设置随机种子的,当我们不设置随机种子的时候,默认设置的种子为1,也就是srand(1)。
使用rand()时,如果不设定随机数序列标签则只会得到重复的随机数序列,其叫做伪随机数,seed的作用:srand函数的作用是根据参数seed,设置一个随机起始点,而rand函数根据这个起始点发生随机数序列。
如果我们想要程序每次执行生成的随机数都不一样就需要使种子的值一直在变化。
这里我们使用time.h里的time函数,timer=NULL 时得到当前日历时间(从1970-01-01 00:00:00到现在的秒数)。
rand、srand函数用法写程序2010-02-28 16:18:34 阅读358 评论0 字号:大中小订阅srand(设置随机数种子)相关函数rand表头文件#include<stdlib.h>定义函数void srand (unsigned int seed);函数说明srand()用来设置rand()产生随机数时的随机数种子。
参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。
如果每次seed 都设相同值,rand()所产生的随机数值每次就会一样。
返回值范例#include<time.h>#include<stdlib.h>main(){int i,j;srand((int)time(0));for(i=0;i<10;i++){j=1+(int)(10.0*rand()/(RAND_MAX+1.0));printf(" %d ",j);}}执行5 8 8 8 10 2 10 8 9 92 9 7 4 103 2 10 8 7rand(产生随机数)相关函数srand表头文件#include<stdlib.h>定义函数int rand(void)rand()会返回一随机数值,范围在0至RAND_MAX 间。
在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
关于随机数种子请参考srand()。
返回值返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。
范例#include<stdlib.h>main(){int i,j;for(i=0;i<10;i++){j=1+(int)(10.0*rand()/(RAND_MAX+1.0));printf("%d ",j);}}执行9 4 8 8 10 2 4 8 3 69 4 8 8 10 2 4 8 3 61、rand返回0-RAND_MAX之间均匀分布的伪随机整数。
随机数函数rand随机数函数(rand)是一个在计算机编程中广泛使用的函数,用于生成指定范围内的随机数。
随机数在很多领域中都有广泛的应用,例如密码学、模拟实验、游戏开发等。
在本文中,我将详细介绍rand函数的使用方法、生成随机数的原理,并讨论一些与rand函数相关的重要概念和注意事项。
首先,让我们来看一下rand函数的基本用法。
在大多数编程语言中,rand函数的调用方式是rand(,它通常不需要任何参数。
rand函数的返回值是一个伪随机数,其取值范围通常是从0到一些最大值。
在C语言中,这个最大值可以通过RAND_MAX常量来表示,它通常是一个很大的整数。
那么,rand函数是如何生成这些伪随机数的呢?在计算机中,真正的随机数很难实现,因为计算机是一个按照确定的规律执行指令的机器。
因此,我们需要借助一些算法来生成伪随机数。
rand函数通常使用的算法是基于线性同余法(Linear Congruential Method),它将当前的随机数与两个常数(A和C)相乘,并加上一个偏移量B,然后取结果的低位作为下一个随机数。
这个算法有一个非常重要的性质:如果A、C、B和种子的值是固定的,那么生成的随机数序列也是固定的。
因此,为了得到不同的随机数序列,我们通常会使用不同的种子值。
为了使用rand函数生成指定范围内的随机数,我们可以通过一些简单的数学操作来实现。
例如,如果我们想生成一个0到99之间的随机数,我们可以使用下面的代码:```cint num = rand( % 100;```在这个例子中,rand(函数返回一个0到RAND_MAX之间的数,我们通过取模运算将其限制在0到99之间。
在使用rand函数时,我们需要注意一些重要的事项。
首先,rand函数生成的随机数是伪随机数,并不是真正的随机数。
因此,在一些情况下,rand函数生成的随机数可能会有一定的可预测性。
如果我们需要更高质量的随机数,可以考虑使用其他随机数生成函数,例如rand_s(函数(在C/C++中)或者random(函数(在Python中)。
rand函数是C语言中常用的随机数生成函数,其用法如下:
1.定义:rand函数返回一个在0到RAND_MAX之间的随机整数。
2.初始化:在使用rand函数之前,需要先使用srand函数进行初始化。
srand
函数需要一个无符号整数作为参数,用于设置随机数生成器的种子。
3.产生随机数:调用rand函数即可产生随机数。
例如,下面的代码将生成10个介于0和100之间的随机整数:
c复制代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
int i;
srand((unsigned int)time(NULL)); // 使用当前时间作为随机数生成器的种子
for (i = 0; i < 10; i++) {
int random_number = rand() % 101; // 生成0到100之间的随机整数
printf("%d ", random_number);
}
return0;
}
注意:每次运行程序时,rand函数生成的随机数序列是相同的,因为随机数生成器的种子是固定的。
如果想得到不同的随机数序列,可以使用不同的种子,例如使用当前时间作为种子。
rand的用法在编程中,rand() 函数是一个常用的随机数生成函数,通常用于生成一系列随机数。
它通常在 C 语言和许多其他编程语言中使用。
本篇文章将详细介绍rand() 函数的用法,包括其基本概念、常见用法和注意事项。
一、基本概念rand() 函数是 C 语言标准库中的一个函数,用于生成一个伪随机数。
这个函数会根据一个种子(seed)值来生成随机数,每次调用 rand() 函数时,都会得到一个新的随机数。
通常,我们使用 time(NULL) 来作为种子值,以确保每次运行程序时生成的随机数序列不同。
二、常见用法1. 生成随机整数rand() 函数可以用于生成指定范围内的随机整数。
例如,可以使用rand() % 100 来生成 0 到 99 之间的随机整数。
2. 生成随机数组可以使用 rand() 函数来生成一个随机数组。
例如,可以定义一个数组,并使用 rand() 函数来填充数组中的元素。
3. 组合随机数rand() 函数可以与其他函数或表达式组合使用,以生成更复杂的随机数序列。
例如,可以使用 rand() % array_size 来生成一个指定范围内的随机索引,然后使用该索引来访问一个数组中的元素。
三、注意事项1. 种子值的使用在使用 rand() 函数时,需要注意种子值的选取。
通常,我们使用time(NULL) 作为种子值,以确保每次运行程序时生成的随机数序列不同。
但是,如果使用固定的种子值,则每次运行程序时生成的随机数序列将是相同的。
因此,建议使用不同的种子值来确保每次运行程序时生成的随机数序列不同。
2. 范围限制rand() 函数生成的随机数范围是 [0, RAND_MAX],这意味着它可以生成非常大的数字。
但是,在实际应用中,我们通常只需要生成指定范围内的随机数。
因此,需要注意不要超出所需的范围限制。
3. 与其他函数的配合使用rand() 函数可以与其他函数或表达式配合使用,以生成更复杂的随机数序列。
keil rand函数Keil是一种嵌入式软件开发工具,而rand函数则是C语言中的一种随机数生成函数,可以在Keil中使用。
下面将对Keil rand函数进行详细介绍。
1. rand函数概述rand函数是C语言中的随机数生成函数,可以生成一个指定范围内的随机整数。
它的原型如下:```cint rand(void);```rand函数通过计算伪随机数生成器的结果来产生随机数。
它的实现方式可能会因编译器不同而有所不同,但在Keil中,rand函数的实现方式是基于线性同余法的。
2. srand函数概述使用rand函数生成的随机数序列是可重复的,因为它的种子值是固定的。
为了产生不同的随机数序列,需要设置不同的种子值。
这就是srand函数的用途,它用于设置rand函数的种子值。
srand函数的原型如下:```cvoid srand(unsigned int seed);```seed参数是一个无符号整数,用于指定rand函数的种子值。
通常,可以使用系统时间或进程ID作为种子值,以产生不同的随机数序列。
3. Keil中rand函数的使用在Keil中使用rand函数时,需要包含stdlib.h头文件,并使用srand 函数设置rand函数的种子值。
以下是一个生成100个1~100之间随机数的例子:```c#include <stdlib.h>#include <time.h>#include <stdio.h>int main(){int i, j;srand((unsigned)time(NULL));for (i = 0; i < 100; i++){j = rand() % 100 + 1;printf("%d ", j);}return 0;}```该代码使用time函数获取当前系统时间作为种子值,然后使用rand 函数生成1~100之间的随机整数。
c语言中rand的用法c语言中rand的用法的用法你知道吗?下面小编就跟你们详细介绍下c语言中rand的用法的用法,希望对你们有用。
c语言中rand的用法的用法如下:rand(产生随机数)相关函数srand表头文件#include<stdlib.h>定义函数int rand(void)函数说明rand()会返回一随机数值,范围在0至RAND_MAX 间。
在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
关于随机数种子请参考srand()。
返回值返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。
范例/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考srand()*/#include<stdlib.h>main(){int i,j;for(i=0;i<10;i++){j=1+(int)(10.0*rand()/(RAND_MAX+1.0));printf("%d ",j);}}执行9 4 8 8 10 2 4 8 3 69 4 8 8 10 2 4 8 3 6srand(设置随机数种子)相关函数rand表头文件#include<stdlib.h>定义函数void srand (unsigned int seed);函数说明srand()用来设置rand()产生随机数时的随机数种子。
参数seed 必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。
如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
返回值范例/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand ()参照*/#include<time.h>#include<stdlib.h>main(){int i,j;srand((int)time(0));for(i=0;i<10;i++){j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); printf(" %d ",j);}}执行5 8 8 8 10 2 10 8 9 92 9 7 4 103 2 10 8 7。
C语言中的概率算法实现概率算法是计算机科学中常用的一种算法,用于处理随机事件的概率分布和概率计算。
在C语言中,我们可以使用各种技术和方法来实现概率算法。
本文将介绍C语言中常用的概率算法实现方式和示例代码。
一、伪随机数生成器在概率算法中,伪随机数生成器(pseudo-random number generator)是一种常用的工具。
它可以生成接近于真正随机数的数列,用于模拟随机事件的概率分布。
C语言中提供了许多生成伪随机数的函数,比如rand()函数,该函数可以生成一个在范围[0, RAND_MAX]之间的整数。
示例代码:```c#include <stdio.h>#include <stdlib.h>#include <time.h>int main() {int i, n;srand(time(0)); // 初始化随机数种子printf("生成10个随机数:");for (i = 0; i < 10; i++) {n = rand();printf("%d ", n);}return 0;}```在上述示例代码中,使用srand()函数初始化随机数种子,使用rand()函数生成随机数。
二、概率分布函数为了实现具体的概率算法,我们通常需要使用概率分布函数(probability distribution function),它描述了随机事件的概率分布情况。
C语言中提供了一些常用的概率分布函数,比如均匀分布、正态分布等。
示例代码:```c#include <stdio.h>#include <stdlib.h>#include <time.h>double uniform_distribution() {return (double)rand() / RAND_MAX; // 生成[0, 1)之间的均匀分布随机数}double normal_distribution(double mean, double stddev) {double u = uniform_distribution();double v = uniform_distribution();double z = sqrt(-2 * log(u)) * cos(2 * M_PI * v);return mean + stddev * z; // 生成均值为mean,标准差为stddev的正态分布随机数}int main() {int i;srand(time(0));printf("生成10个均匀分布随机数:");for (i = 0; i < 10; i++) {double n = uniform_distribution();printf("%lf ", n);}printf("\n生成10个正态分布随机数:");for (i = 0; i < 10; i++) {double n = normal_distribution(0, 1);printf("%lf ", n);}return 0;}```在上述示例代码中,uniform_distribution()函数生成[0, 1)之间的均匀分布随机数,normal_distribution()函数生成均值为mean,标准差为stddev的正态分布随机数。
标准库
函数一:intrand(void);
从srand(seed)中指定的seed开始,返回一个[seed,RAND_MAX(0x7fff))间的随机整数。
函数二:voidsrand(unsignedseed);
参数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(inti=0;i<10;i++){
ran_num=rand()%6;
cout<
每次运行都将输出:5544540042
例二,指定seed为定值1:
srand(1);
for(inti=0;i<10;i++){
ran_num=rand()%6;
cout<
每次运行都将输出:5544540042
跟例子一的结果完全一样。
例三,指定seed为定值6:
srand(6);
for(inti=0;i<10;i++){
ran_num=rand()%6;
cout<
每次运行都将输出:4151434422
随机值也是在[0,6)之间,随得的值跟srand(1)不同,但是每次运行的结果都相同。
例四,指定seed为当前系统流逝了的时间(单位为秒):time_ttime(0):
#include
//…
srand((unsigned)time(0));
for(inti=0;i<10;i++){
ran_num=rand()%6;
cout<
第一次运行时输出:
0154502342
第二次:3230355223
总之,每次运行结果将不一样,因为每次启动程序的时刻都不同(间隔须大于1秒?,见下)。
关于time_ttime(0):
time_t被定义为长整型,它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单
位为秒。比如假设输出:
cout<
另外,关于ran_num=rand()%6,
将rand()的返回值与6求模是必须的,这样才能确保目的随机数落在[0,6)之间,否则rand()
的返回值本身可能是很巨大的。
一个通用的公式是:
要取得[a,b)之间的随机整数,使用(rand()%(b-a))+a(结果值将含a不含b)。
在a为0的情况下,简写为rand()%b。
最后,关于伪随机浮点数:
用rand()/double(RAND_MAX)可以取得0~1之间的浮点数(注意,不同于整型时候的公式,
是除以,不是求模),举例:
doubleran_numf=0.0;
srand((unsigned)time(0));
for(inti=0;i<10;i++){
ran_numf=rand()/(double)(RAND_MAX);
cout<
运行结果为:0.716636,0.457725,…等10个0~1之间的浮点数,每次结果都不同。
如果想取更大范围的随机浮点数,比如1~10,可以将
rand()/(double)(RAND_MAX)改为rand()/(double)(RAND_MAX/10)
运行结果为:7.19362,6.45775,…等10个1~10之间的浮点数,每次结果都不同。
至于100,1000的情况,如此类推。