1. 程式人生 > >C/C++基礎----隨機數分佈和隨機數引擎

C/C++基礎----隨機數分佈和隨機數引擎

隨機數分佈

除了伯努利分佈,其他都是模板,接收單個型別引數,指出分佈生成的結果型別。

均勻分佈
uniform_int_distribution<IntT> u(m, n);
uniform_real_distribution<RealT> u(m, n);
m預設0,n預設IntT物件可以表示的最大值;m預設0.0,n預設1.0
伯努利分佈
Bernoulli_distribution b(p);//以概率p生成true,預設0.5
Bernoulli_distribution<IntT> b(t, p);//分佈的取樣大小為整型值t。t預設1,p預設0.5
geometric_distribution<IntT> g(p);//每次試驗成功概率為p,預設0.5
negative_binomial_distribution<IntT> nb(k, p);//k次試驗成功概率為p。k預設1,p預設0.5
泊松分佈
poisson_distribution<IntT> p(x);//均值為double值x
exponential_distribution<RealT> e<lam);//指數分佈,lambda浮點值,預設1.0
gamma_distribution<RealT> g(a, b);//形狀引數為a,尺度引數為b,預設均為1.0
weibull_distribution<RealT> w(a, b);// 形狀引數為a,尺度引數為b,預設均為1.0
extrme_value_distribution<RealT> e(a, b);//a的預設值為0.0,b預設1.0
正態分佈
normal_distribution<RealT> n(m, s);//均值m,標準差s;預設0.0,1.0
lognormal_distribution<RealT> ln(m, s);//
chi_squared_distribution<RealT> c(x);//自由度x,預設1.0
cauchy_distribution<RealT> c(a, b);//位置引數a和尺度引數b預設分別0.0,1.0
fisher_f_distribution<RealT> f(m, n);//自由度為m和n,預設值均為1
student_t_distribution<RealT> s(n);//自由度為n,預設值1
抽樣分佈
discrete_distribution<IntT> d(i, j);
discrete_distribution<IntT> d(il);
i和j是權重序列的輸入迭代器,il是權重的花括號列表。權重必須能轉換為double
piecewise_constant_distribution<RealT> pc(b, e,w);//b e w輸入迭代器
piecewise_linear_distribution<RealT> pc(b, e,w);//b e w輸入迭代器

隨機數引擎

標準庫定義了3個引擎類和3個引擎介面卡類,都是模板
default_random_engine
來自其他引擎型別的類型別名,目的是用於大多數情況
linear_congruential_engine
minstd_rand0的乘數為16807,模為2147483647,增量為0
minstd_rand0的乘數為48271,模為2147483647,增量為0
mersenne_twister_engine
mt19937為32位無符號梅森旋轉生成器
mt19937_64為64位無符號梅森旋轉生成器
subtract_with_carry_engine
ranlux24_base為32位無符號借位減法生成器
ranlux48_base為64位無符號借位減法生成器
discard_block_engine
引擎介面卡,將其底層引擎的結果丟棄。用要使用的底層引擎、塊大小和舊塊大小來引數化
ranlux24使用ranlux24_base引擎,塊大小223,舊塊23
ranlux48使用ranlux48_base引擎,塊大小389,舊塊11
independent_bits_engine
引擎介面卡,生成指定位數的隨機數。用要使用的底層引擎、結果的位數以及儲存生成的二進位制位的無符號整型型別來引數化。指定位數必須小於指定的無符號型別所能儲存的位數。
shuffle_order_engine
引擎介面卡,返回的就是底層引擎生成的數,但返回的順序不同。用要使用的底層引擎和要混洗的元素數目來引數化。
knuth_b使用minstd_rand0和表達小256