介绍
在新的标准之前,C和C++产生随机数都依赖与简单的C库函数rand(),这个函数产生一个伪随机数均匀分布在[0-system dependent maximum value(at least 32767)]。
但是rand()函数存在问题:有的程序需要不同的随机数范围,有的程序需要浮点随机数,有的程序可能需要的不是均匀分布的随机数。所以在程序员处理、转换这些问题的时候往往可能引入不随机的特性。
为了解决这个为题,新的c++库引入随机数库,定义在 <random> 头文件中,主要两个类:
Engine | Distribution |
---|---|
生成无符号整型的随机序列 | 利用Engine,根据特定的分布,返回随机数 |
random-number generator:指的是distribution 的对象关联一个Engine
知识点
库中的Distribution 和 Engine
详见: c++ prime p883-p885
distribution | 说明 |
---|---|
均匀分布 | ************************** |
uniform_int_distribution<types> u(m,n) | 产生[m,n]均匀分布的整数 |
uniform_real_distribution<types> u(m,n) | 产生[m,n]默认[0-1]均匀分布的实数 |
伯努利分布 | ************************** |
bernoulli_distribution b( p ) | |
binomial_distribution<types>b(t, p) | |
geometric_distribution<types> g( p ) | |
negative_binomial_distribution<types> nb(k, p) | |
泊松分布 | ************************* |
poisson_distribution<types> p(x) | |
exponential_distribution<types> e (lam) | |
gamma_distribution <types> g(a, b) | |
weibull_distribution<types> w (a, b) | |
正态分布 | ************************* |
normal_distribution<types> n (m, s) | |
lognomal_distribution<types> ln (m, s) | |
chi_squared_distribution<types> c ( x ) | |
cauchy_distribution<types> c (a, b) | |
fisher_f__distribution<types> f (m, n) | |
student_t__distribution<types> s( n) | |
抽样分布 | ************************* |
discrete_distribution<types> d( i, j ) | |
discrete__distribution<types> d { il } | |
piecewise_constant_distribution<types> pc(b, e, w) | |
piecewise_linear_distribution<types> pl(b, e, w) |
Engine | 说明 |
---|---|
default_random_engine | |
shuffle_order_engine | |
linear_congruential_engine | |
mersenne_twister_engine | < |