擬似乱数に関するメモ・実験など


参考になりそうな情報源


実験コード

混合合同法

よくC言語の書籍で題材になっている「混合合同法」。
性能についてはおいておき、一例としてメモ。
手元にあった「C言語によるプログラミング[応用編]第2版」P.57-59に掲載されていたコード。
32ビットCPUでの動作を想定したもので、定数値は本のまま。コメントだけ追加した
CPUが4ビットや8ビットの時は初期値と加算および割り算を行う数値を変更する必要がある。
( 2^(N-1):32ビットの場合はN=32なので、2147483648)
double myrand( void )
{
  static long x = 53402397;/* 乱数列の出発値 */
  x = x * 65539 + 125654;  /* 乱数の計算 */
  if ( x < 0 ) {
    x += 2147483647;       /* オーバーフロー時に負数になるので加算 */
    x += 1;                /* 不明:x += 2147483648;でもよいのか? */
  }
  return x/2147483648.0;   /* [0,1)となるよう割り算 */
}
(*)コンパイラーを通していないので動かないかも

まんでがん実験室に戻る