C/C++基礎----隨機數分佈和隨機數引擎
阿新 • • 發佈:2018-12-28
隨機數分佈
除了伯努利分佈,其他都是模板,接收單個型別引數,指出分佈生成的結果型別。
均勻分佈 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