« 講義 | メイン | Mersenne Twister (2) »

2005年07月19日

Mersenne Twister

Mersenne Twister (メルセンヌツイスター)のテストプログラムを書いてみました。テストといってもドキュメントで示されているパターンを表示する程度のものです。

c 言語の rand によるプロット Mersenne Twister によるプロット

と、確かにパターンが表示されるのが確認できました。しかし このドキュメント で示されるように、このプロットは [0, 1/70] の区間をプロットしています。即ち、[0, 0.01428] くらいの区間をプロットしていることになります(開閉区間は厳密ではありません)。

これを読んでから思ったのですが、これってランダム性能というか分解性能の問題のような気がしました。最初はこの原点付近 1/70 を知らずに組んでしまったので、しっかりランダムな感じにプロットがされてしまいました。

講義のビデオを見ればわかりますが疑似乱数にはいろいろな性格があり Mersenne Twister は(現時点のコンピュータアーキテクチャ上では)よい疑似乱数生成器であるのだそうです。この辺に関するいろんな言及はビデオで説明されています。詳しくは論文を読むのがいいでしょう。

参考までにこのプログラムはこれです(要glut)。乱数生成に非常に時間がかかるので、一度計算して作った乱数のファイルを読むようにしてあります。rand_mt.bat を実行するとファイルを読んでプロットを行います。初期状態は rand によるプロットで、m キーを押すと Mersenne Twister によるプロットになります。rand に戻すには r です。

(2006.05.12 追記)
glut のリンクが切れていました。リニューアルのときに変わったのかな?


投稿者 napier : 2005年07月19日 00:07


トラックバック

このエントリーのトラックバックURL:
http://will.squares.net/mt/mt-modified-tb.cgi/235