Mersenne Twister with improved initialization (2002)
English Version
News: SIMD-oriented Fast Mersenne Twister (SFMT)
をリリースしました。
SFMTはオリジナルのMersenne Twisterより約二倍速く、
よりよい均等分布特性を持ち、零超過初期状態からの回復も高速です。
SFMTのページを見てください。
(2007/1/31)
1998年版MTの初期化ルーチンには、シードの最上位ビットが
状態ベクトルにあまり反映されないなどの(小さな)問題が
ありました。
同種の問題
は、いとこであるTT800に対して
Jeff Szuhay
によりすでに報告されていましたが、
対応が遅れました。
ここに、この問題点を解決した2002年版標準コードmt19937ar (arはアレイ)を
おきます。
-
従来の初期化ルーチンに変えて、init_genrand(seed)をお使い下さい。
-
特に32ビットより長い初期シードを用いたい人は、
init_by_array()により任意長の配列を用いて初期化することもできます。
-
半開区間、53ビット精度実数にも対応。
gzipped tar-file:
mt19937ar.tgz
.
このtarファイルの中味は
使い方は、上記readme-mt.txtファイル(英語)を読んで下さい。
日本語による説明
readme-mt-jp.html
スピードを必要とされる方への注意:
5つの実数版のいずれも、整数版への関数呼び出しを行なっています。
このため、速度が前のバージョンより遅くなっています。コンパイラ
の最適化レベルを最大にすると、関数呼び出しがinlineの展開に
なり、速度の差があらわれないことが多いです。そうでない場合は、
手でgenrand_intを必要な関数の中にコピーして変換を行ない、
関数呼び出しに
替えて下さい。
Shawn Cokusの高速版を参考にした高速かも知れないバージョン (2002/Feb./11).
(Pentium 4では却って遅いという Agner Fog の報告もあり。)
Cokus版を参考にし、さらにMatthew Bellewの簡素化、高速化を
とりいれた
gzipped tar-file:
mt19937ar-cok.tgz
.
この.tarファイルの中身は以下の通りです。
Pablo M. Ronchi さんや他の方の提案によりmt19937ar.c
ファイルを関数本体の入った.cファイルと
関数プロトタイプ宣言の入った.hファイル、そしてテスト用の
メイン関数の入った.cファイルの三つに分割しました。
この結果より使いやすくなると思います。
gzipped tar-file of these files:
mt19937ar.sep.tgz
.
この.tarファイルの中身は以下の通りです。
-
Cソースファイル mt19937ar.c
-
ヘッダファイル mt19937ar.h
-
テスト用Cソースファイル for test mtTest.c
-
これらの出力 mt19937ar.out
-
(英語の)リードミーファイル readme-mt.txt.
乱数生成や初期化のアルゴリズムは変わっていません。
mt19937ar.c (2002 version)と同じです。
これらのバージョンは、BSDライセンスに準拠しており、
改変、商用利用にも自由にお使いできます。
MTのページへ戻る