koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

乱数生成

この記事は株式会社はてなの社内スピーチ向けに書きました。

予測のつかないランダムな出来事が好きだ。子供のころはカードダスガシャポンが好きだったし、テーブルゲームでもコンピュータゲームでもランダムな結果にはやきもきしてきた。今でもしばしばソーシャルゲームのガチャには射幸心を煽られている。

出来事と言ってはいるが、ゲームなどでは人為的にランダム、乱数を作っている。

この記事は乱数生成についてのさわりと、それへの個人的な取り組みについてのものだ。

アナログな世界の乱数生成

サイコロを振ればいい。

すごろくで6面ダイスを振る、人生ゲームでルーレットを回す、宝くじで回っている円盤にモノを投げる。

サイコロ以外でも色んな手法で乱数を生成できる。

サイコロは均等な結果(出目)を得るのはなかなか難しいけれど、無作為に振れば予測できない乱数にはなる。

www.youtube.com

(私物のサイコロの写真でも貼っておこうと思ったけれどすぐ見つかる場所にはなかった)

デジタルな世界の乱数生成

デジタルな世界、プログラムで乱数を扱うのはなかなか難しく、多くの場面では疑似的な乱数を使う。

疑似乱数は長い周期で繰り返される数の列の一部を切り取っているものが多い。イメージ的には円周率の桁を順番にランダムな数として見てる感じ。これを特定の規則で作れる仕組みだったり、あらかじめ表にしてあったりする。

コンピュータゲームで『乱数調整』といったことができるのはこの周期性があることによっている。社内にもそれを楽しんでいる人がいる。

www.mizdra.net

デジタルな世界の疑似乱数には暗号に使っていいか? など難しい要素もある。仕事で乱数を使うときには用途に合った乱数なのか気を付けたい。

用途や使い方を間違えると炎上する。

quesera2.hatenablog.jp

アナデジ変換

完全にデジタルな世界では乱数を得ることは難しいので、アナログな世界から乱数を持ち込むのが一般的だ。

なんでも原子核が自然崩壊するタイミングには周期性がないそうなので、それを観測して乱数を得るらしい。最近ではそれがコンパクトなモジュールになっているようだった。すごい。

www.quantaglion.com

と、これらは産業用の本気のものだ。

趣味としての試みなら単にサイコロを振ってその写真を撮って出目を判断してやればよい。と、そういうボットを作った(まだ作っている)。

出掛けたときに何を食べるのか占う程度にしか使っていないけれど、とても楽しい。

オチ

好きだと言いつつ、この体たらく。歳を取ると安定志向になってしまうのかもしれない。

予測のつかないランダムな出来事が好きだ。ただしお金や場所を過大に消費しない限り。