C#による Mersenne Twister の実装
Mersenne Twister とは?
Mersenne Twister とは、松本 眞さん、西村 拓士さんによって開発された疑似乱数生成アルゴリズムです。
非常にすぐれたアルゴリズムとして、様々な所で利用されています。
Mersenne Twister に関する詳しい情報、オリジナルの C ソースコード等は
Mersenne Twister Home Page
で得る事ができます。
C# 版 Mersenne Twister
※追記 2004/05/22
KiT様より、MersenneTwister.cs に System.Random を継承したクラスとしては不適切な点がある事をご指摘頂きました。
ご指摘頂いた部分を修正した物をアップしました。修正部分については
不具合についてを参照してください。
尚、旧バージョンをそのまま用いていらっしゃる方の為に
旧バージョンも残してあります。
コンパイル方法など
動作は .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 の以下のメソッドをオーバーライドしています。
- public int Next ();
- public int Next (int);
- public int Next (int, int);
- public void NextBytes (byte[]);
- public double NextDouble ();
また、クラス MersenneTwister で以下のメソッドを新たに定義しました。(これらのメソッドは System.Random を通しては利用できません)
- protected uint GenerateUInt();
- public virtual uint NextUInt();
- public virtual uint NextUInt( uint maxValue);
- public virtual uint NextUInt( uint minValue, uint maxValue);
謝辞
すぐれたアルゴリズムを開発/公開され、C# 版の実装を公開するのを許可して下さった松本氏と西村氏に深く感謝致します。
このページとここで公開しているファイルに関して、どんな些細な事でもフィードバックを頂けると嬉しいです。
Copyright (C) 2001-2009 Takel Hinomoto. <
takel.jp.admin@gmail.com>
All rights reserved.