正規分布に従う乱数発生方法メモ

2013年12月23日月曜日

C言語

t f B! P L
いいサイトを見つけた

C言語による乱数生成http://www.sat.t.u-tokyo.ac.jp/~omi/random_variables_generation.html

研究で正規分布に従う乱数を得る必要があってネットを見てたら発見



C言語での一様乱数の作り方が普段やってる方法(Cの本に載ってた)とちょい違うなー

普段(本)
int r = rand()/(RAND_MAX+1.0);

上記サイト
int r = ((double)rand()+1.0)/((double)RAND_MAX+2.0);

どっちがいいとかあるのかなー?



で、調べていた正規分布の乱数発生器は以下

double rand_normal( double mu, double sigma ){
   double z=sqrt( -2.0*log(Uniform()) ) * sin( 2.0*M_PI*Uniform() );
   return mu + sigma*z;
}

引数のmuが中心値でsigmaが分散値ですね

いやー正直自力でこの乱数発生方法は思いつかんわー
調べて良かった!Box-Muller法というらしい

Translate

このブログを検索

  • ()
  • ()
もっと見る

QooQ