乱数生成

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;
}