この文書のタイトルには、単に「乱数」と書いたけれども、 本当は「擬似乱数 (疑似乱数, pseudorandom numbers)」と書くべきであろう。 この二つの言葉の違いをきちんと説明するのは当面さぼることにするが、 乱暴に短くまとめると
(これはほぼ余談) なお、実際のコンピューターは、ハードウェアがついているので、 乱数を作ることが出来る、という意見もあり、 例えば最近の C++ には、非決定性乱数を生成する関数が用意されている。
私自身は擬似乱数を使った経験はあまりない。 大学生の時(40年くらい前)に友人 (経済学部の学生) の統計学のレポートの手伝いで、 大型電子計算機上の TSS で動いている BASIC でプログラムを書いたときくらい? 後はプログラミング関係の授業でモンテカルロ法を紹介するときとか (笑)。
ところでうちの学科には、統計関係のことに興味を持つ学生が多い (これはカリキュラムが功を奏しているのかも)。 ゼミで好きなことをやって良いと言うと、モンテカルロ法を取り上げて、 そのため疑似乱数を用いる人が多いのだが、 しばしば、あぶなっかしいことをやっている。 具体的には、古めかしい線形合同法を使って、 しかもそのパラメーターの選択が不適切なことが多い。
そうなる理由は色々推察出来る。
そういう学生に、ずっと以前に書いた
「疑似乱数についてのメモ」を紹介しようかとも思ったが、ノイズが多いので、 それに頼られると逆にひどい誤解をしそうだ。 というわけでこの文書を書く。
http://nalab.mind.meiji.ac.jp/~mk/labo/text/giji-ransuu/
線形合同法については、 定番の文献として Knuth [1] を紹介しておく。 実際に使われている実装でどういうパラメーターが採用されているかについては、 Wikipedia の “Linear congruential generator” の “Parameters in common use” (https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use) が参考になる (英語版 Wikipedia はさすがである)。