擬似乱数生成器を作ろうとしてみたメモ
基本的に、それらの乱数のアルゴリズムは整数を生成するもの 各種の言語処理系には、大抵$ [0, 1)の実数を生成するAPIが多いが?
そこで整数から実数に変換する
どうやって?
整数から実数に変換する方法
単純に割り算する
例えば8ビットの符号なし整数なら、256で割ることで$ [0, 1)になる
golangの標準ライブラリ(math/rand)がこれだった たぶん32ビットじゃなくてもっと長いビット数の整数を作ろうとしているんだな
ただこのライブラリのコード自体は、色々なアルゴリズムが見られるので面白い
ついでにgolangのmath/randのアルゴリズムを読んでみた
ざっくりまとめ
数百の長さの配列に予めランダムな値を詰めておく
整数iとjを用意しておく
iとjを動かし、配列のi番目とj番目の値を足して、それを乱数の値とする
配列のi番目の値をその乱数の値で置き換える
これはオリジナルのアルゴリズムなんだろうか?