C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数发生器种子( seed)
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数发生器种子( seed)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 定義
種子就是一個數(shù)值,引擎可以利用它從序列中一個新位置重新開始生成隨機數(shù)。支持每次運行程序都會生成不同的隨機結(jié)果。
- 種子可以使用系統(tǒng)函數(shù)time(0)。
- 其他隨機數(shù)分布
eg.
default_random_engine e1; // 使用默認種子 default_random_engine e2(2147483646); // 使用給定的種子值 // e3 和 e4 將會生成相同的序列,因為他們使用了相同的種子 default_random_engine e3; e3.seed(32767); //調(diào)用 seed 設置為一個新種子值 default_random_engine e4(32767); //將種子值設置為 32767 for(size_t i = 0;i != 10; i++) {if (e1() == e2())cout<<"unseeded match at iteeration: "<< i <<endl;if (e3() != e4())cout<<"seeded differs at itertion: "<< i <<endl; }1.1 一個好的種子
調(diào)用系統(tǒng)函數(shù) time(返回從一個特定時刻到當前經(jīng)過了多少秒)
eg. default_random_engine el (time (0) ); / / 稍微隨機些的種子
1.2 其他隨機數(shù)分布
精度不夠:最常用但不正確的從 rand 獲得一個隨機浮點數(shù)的方法是用 rand ( )的結(jié)果除以RAND_MAX
uniform_real_distribution 類型的對象
default_random_engine e; // 生成無符號隨機整數(shù) // 0 到 1 (包含)的均勻分布 uniform_real_distribution<double >u(0,1); for(size_t i =0;i<10;i++)cout<<u(e)<<" "; cout<<endl;1.3 使用分布的默認結(jié)果類型
當我們希望使用默認隨機數(shù)類型時要記得在模板名之后使用空尖括號
eg.
// 空<>表示我們希望使用默認結(jié)果類型 uniform_real_distribution<> u (0,1); //默認生成 double 值1.4 生成非均勻分布的隨機數(shù)
C++ 11 還規(guī)定了可以生成 20 種不同的分布類型
eg. 均勻分布uniform,正態(tài)分布normal,二項分布binomial,泊松分布poisson,學生分布 student
std::default_random_engine e; //引擎 std::normal_distribution<double> n(4, 1.5); //均值4, 方差1.5 std::vector<unsigned> vals(9); for(std::size_t i=0; i != 200; ++i) { unsigned v = std::lround(n(e)); //取整-最近的整數(shù) if (v < vals.size()) ++vals[v]; } for (std::size_t j=0; j != vals.size(); ++j) std::cout << j << " : " << vals[j] << std::string(vals[j], '*') << std::endl;總結(jié)
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数发生器种子( seed)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha