C#による Mersenne Twister の実装


Mersenne Twister とは?

Mersenne Twister とは、松本 眞さん、西村 拓士さんによって開発された疑似乱数生成アルゴリズムです。 非常にすぐれたアルゴリズムとして、様々な所で利用されています。 Mersenne Twister に関する詳しい情報、オリジナルの C ソースコード等は Mersenne Twister Home Page で得る事ができます。

C# 版 Mersenne Twister

Mersenne Twister のページ を拝見した所、C# による Mersenne Twister の実装がまだ公開されていなかったので、松本さんの了解を得て、こちらで公開させていただく事にさせて頂きました。 こちらで公開させていただくのはオリジナルの MT19937.c をそのまま C# で書き直した MT19937.cs と .NET ライブラリの System.Random を継承したクラスとして書いた MersenneTwister.cs です。 これらのファイルをArtistic Licenseの元に公開します。
※追記 2004/05/22
KiT様より、MersenneTwister.cs に System.Random を継承したクラスとしては不適切な点がある事をご指摘頂きました。 ご指摘頂いた部分を修正した物をアップしました。修正部分については不具合についてを参照してください。 尚、旧バージョンをそのまま用いていらっしゃる方の為に旧バージョンも残してあります。
ファイル ライセンス 出力例 備考
MT19937.cs Artistic License 出力例 1998年版MersenneTwisterをC#へ移植したものです
MersenneTwister.cs Artistic License   2004/05/22 推奨バージョンです(MersenneTwister自体のルーチンは1998年版のままです)
MersenneTwister.cs Artistic License   推奨されません
*バグ等ありましたら是非お知らせください。

コンパイル方法など

動作は .NET Framework SDK beta2 で確認しました。 MT19937.cs は単独で実行可能なファイルを生成します。 MersenneTwister.cs はクラスですので、別のソースからインスタンスを生成して使用して下さい。 クラス MersenneTwister があるのは 名前空間 jp.takel.PseudoRandom です( .NET ではこういう名前空間のつけ方はしないのかも知れませんが…)。 .NET Framework SDK のコマンドラインコンパイラでコンパイルする時の方法は
他のアセンブリに直接組み込む場合
csc hoge.cs MersenneTwister.cs
ライブラリ(DLL) としてコンパイルする場合
csc /t:library MersenneTwister.cs
として MersenneTwister.dll を生成後
csc hoge.cs /reference:MersenneTwister.dll
ネットモジュールとしてコンパイルする場合
csc /t:module MersenneTwister.cs
として MersenneTwister.netmodule を生成後
csc hoge.cs /addmodule:MersenneTwister.netmodule
の様な感じです。

MersenneTwister.cs についての詳細

MersenneTwister.cs には ネームスペース jp.takel.PseudoRandom にクラス MersenneTwister が公開されています。
MersenneTwister クラスは、System.Random を継承したクラスです。
System.Random の以下のメソッドをオーバーライドしています。
また、クラス MersenneTwister で以下のメソッドを新たに定義しました。(これらのメソッドは System.Random を通しては利用できません)

謝辞

すぐれたアルゴリズムを開発/公開され、C# 版の実装を公開するのを許可して下さった松本氏と西村氏に深く感謝致します。

<< Back to home >>
このページとここで公開しているファイルに関して、どんな些細な事でもフィードバックを頂けると嬉しいです。
Copyright (C) 2001-2009 Takel Hinomoto. <takel.jp.admin@gmail.com>
All rights reserved.