C/C++随机数总结

1、C语言产生随机数的方法

int rand()该函数的返回值是一个随机数,包含在stdlib.h头文件中;
void srand(unsigned int seed);返回值为空, 是设置随机种子的,当我们不设置随机种子的时候,默认设置的种子为 1,也就是srand(1)。使用示例如下:先用srand函数设置随机数种子,然后用rand函数得到随机数,种子不同得到的随机数不同,种子相同,得到的随机数相同。

#include<stdlib.h>//得引入 stdlib.h 这个头文件
int main()
{
 srand(3);
 int rand_num = rand();
 printf("rand_num = %d\n", rand_num);
 srand(5);
 rand_num = rand();
 printf("rand_num = %d\n", rand_num);
 return 0;
}

为了得到不同的随机数,就需要使用不同的随机种子。随机种子有规律时,生成的随机数并不是有规律的,通常使用系统时间作为随机种子,int time()函数可以返回当前系统时间,然后用来设置设置随机种子。需要引入time.h头文件,使用示例如下:
 

#include<time.h> //使用 time 函数必须引入 time.h 头文件
#include<stdlib.h>
int main()
{
 srand((int)time(0));
 int rand_num = rand();
 printf("rand_num = %d\n", rand_num);
 return 0;
}

当需要生成特定范围的随机数时需要再添加一个限制条件,当我们需要生成a~b的随机数的时候,我们可以使用rand()%(b-a+1)+a即可,C语言中生成随机数的方法。

还有需要注意的一点是,C/C++使用一个随机种子生成随机数序列可以生成无限多个不同的随机数,但是如果不改变随机种子,下次调用时,生成的随机数序列还是与上次一样的,并不是说每生成一个随机数就需要一个随机种子,是针对一次生成过程。(╮(╯▽╰)╭今天才知道)

2、C++产生随机数的方法

C++使用random中的随机数库通过一组协作的类实现生成随机数的功能,设计两个类:随机数引擎类、随机数分布类。前者可以生成unsigned随机数序列(原始随机数),后者使用一个引擎类生成指定类型的、在给定范围的、服从特定概率分布的随机数。得到随机数序列的一般方法是先创建一个引擎类对象,然后为引擎对象设置随机数种子,如果不设置会有默认值,但是每次得到的序列是一样的,然后选择分布包括限定范围。

default_random_engine e1;        //创建一个引擎类对象e1
e1.seed(456);                    //为e1设置一个新种子

default_random_engine e2(265);   //创建的同时设置一个新种子

//创建一个分布类对象u,设定类型及范围,此时它并不属于任何一个随机数引擎                                                  
uniform_int_disribution_<unsigned> u(0,16);  

for(size_t i = 0; i < 100; i++)
{
    cout << u(e1) << endl;            //通过u(e)调用,可以输出100个随机数 
}
//为同一个引擎设置不同的种子(相当于选定序列中的新位置),就能让下次循环输出不一样的序列,如下所示
e1.seed(400); 
for(size_t i = 0; i < 100; i++)
{
    cout << u(e1) << endl;            //通过u(e)调用,可以输出100个随机数 
}
//两个循环的输出是不一样的,随机种子不同序列完全不同,应该是每个种子对应一个很长的序列,而不是每个种//子对应同一个很长的序列中的不同位置(起始点)

此外,还有不同的分布,可以去尝试。

注:本文文字部分是自己写的,是自己的理解,代码部分使用了别人的博客,不是自己写的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值