« Mersenne Twister | メイン | ARB_texture_non_power_of_two »

2005年07月20日

Mersenne Twister (2)

分解性能の問題と言いましたが、理由はこうです。c 言語の rand の上限値は stdlib.h で定義されており、一般的な環境では RAND_MAX が 0x7fff です。疑似乱数の取りうる範囲は [0, 32767] であり、原点付近 1/70 の範囲では 32,768/70 で約 468 段階の分解性能しかありません。Mersenne Twister の実装では RAND_MAX に相当する値は 0xffffffff であり、原点付近 1/70 の範囲では 4,294,967,295/70 なので約 61,356,675 段階の分解性能があることになります。

これは単なる一例ですが、では rand の RAND_MAX の値が 0xffffffff の実装をしたら?とか、その際の生成コスト(処理時間)は?とか、生成された疑似乱数の正規分布はどうなの?とか、じゃあ周期は?などの諸々の問題に応えたのが Mersenne Twister です(厳密に検討してみるとわかるのだと思います。ここではウケウリ)。もちろん今あげたのはパッと思いついたものだけであり、疑似乱数に必要な全ての条件ではありません。

ところで Mersenne Twister の良さを示すサンプルとして、このプロット画像は非常に分かりやすいですね。rand の問題点と、Mersenne Twister によってそれがどのように改善されたのかがひと目でわかります。この辺の技術は広告の技術とも言えます(これはビデオの方でも言及されています)。


投稿者 napier : 2005年07月20日 00:30


トラックバック

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