c++生成随机数

一.获取均匀分布的随机数

经典方法:

#include<stdlib.h>
// 产生随机数,范围在0~RAND_MAX之间,RAND_MAX在stdlib中,其值为2147483647
rand();
  • rand的机制是根据一个随机数种子(通常是一个整数值,如果没有设置,则为默认值)来生成一系列指定顺序的随机数,如果种子相同,那么一系列的随机数也是相同的。所以如果你rand();后再rand();就会得到一样的。

    原理:Srand ( );Rand( );函数。它本质上是利用线性同余法,y=ax+b(mod m);其中a,b,m都是常数。因此rand的产生决定于x,x被称为Seed。

  • 可以通过srand()来设置随机数种子。较为普遍的做法是将随机数种子设为time()的时间函数,这样就能根据当前的时间来设置随机数种子,不会存在重复的问题。

  • time()包含在time.h中,返回从一个特定时刻到现在经过了多少秒,它接受单个指针参数,用于指向写入时间的数据结构,若为空,则简单的返回时间。用于产生随机数种子通常用time(0);

  • 如果你要获取一定范围内的随机数,rand()%MAX,MAX为你设置的范围。可以#define random(x) (rand()%x)来简化使用过程,使用时就直接rand(max);就好了

c++11中的新标准:

#include<random>// 随机数库:由引擎类和分布类组成
std::default_random_engine e;// 随机数引擎,生成随机无符号数
e();// 取出队列头的随机数
  • 和rand()函数类似,也是依靠随机数种子,种子可以在初始化时指定std::default_random_engine e(seed);(seed为整型值);也可以调用seed()成员函数指定e.seed(seed);
  • 标准库定义了多个随机数引擎类,区别在于性能和随机性质量不同,每个编译器都
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值