乱数生成
c++の場合
・要点
・rand()は使わない.理由は(1)周期が短い,(2)偏りがあること
・代わりに,c++11で追加された
乱数生成方法が色々あるが,基本は(1)HW乱数生成器でシードを作って,
(2)それをメルセンヌツイスターのシードに与え,(3)所望の分布にしたがって
乱数を生成.ベルヌーイ,ポアソン,対数正規分布など多くの分布ははじめからある.
#include <iostream> #include <random> int main() { // 1. HW random number generator std::random_device hw_rng; // 2. mersenne twister std::mt19937 mt_rng(hw_rng()); // mt_rng() generate a number in [0:0xFFFFFFFF]. // 3. distribution\ // uniform, int, [0:100] std::uniform_int_distribution<> uni_int_rng(0,100); for (int i=0; i<10; ++i) std::cout << uni_int_rng(mt_rng) << std::endl; }