一.获取均匀分布的随机数
经典方法:
#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);
- 标准库定义了多个随机数引擎类,区别在于性能和随机性质量不同,每个编译器都