乱数を取得する
SophiaFramework は、BREWネイティブ、線形合同法、メルセンヌ ツイスター法の3種類の乱数クラスを提供します。
■ BREW ネイティブ( SFXBrewRandom クラス ) : BREW API である GETRAND() 関数を使って乱数を発生させるクラスです。
// 用意されている static 関数を使って乱数を生成する SInt32 n1 = SFXBrewRandom::GetSInt32(); // ※ SInt32 以外の型の乱数を生成する関数も用意されている
■ 線形合同法( SFXLCGRandom クラス ) : 線形合同法を用いて 48 ビットで乱数を発生させるクラスです。アルゴリズムは UNIX の drand48() 関数と同等です。BREW ネイティブ( SFXBrewRandom クラス )と異なり、同じシードを使用すれば、同じ乱数列を取得できます。
// 乱数列の seed はコンストラクタの引数として渡す SFXLCGRandom rand2(3245); // 乱数を生成する SInt32 n3 = rand2.GetSInt32(); // コンストラクタの引数を指定しない場合、時刻が乱数列の seed となる SFXLCGRandom rand; // 乱数を生成する SInt32 n2 = rand.GetSInt32();
■ メルセンヌ ツイスター法 ( SFXMTRandom クラス ) : メルセンヌ・ツイスター法のアルゴリズムを使って乱数を発生させるクラスです。BREW ネイティブ( SFXBrewRandom クラス )と異なり、同じシードを使用すれば、同じ乱数列を取得できます。
※ ローカル変数として SFXMTRandom クラスのインスタンスを作成する場合、2.5K バイトほどのスタックを消費します。スタックの容量が不足する場合はヒープ上にインスタンスを作成します。
// 乱数列の seed はコンストラクタの引数として渡す SFXMTRandom rand2(3245); // 乱数を生成する SInt32 n5 = rand2.GetSInt32(); // コンストラクタの引数を指定しない場合、時刻が乱数列の seed となる SFXMTRandom rand; // 乱数を生成する SInt32 n4 = rand.GetSInt32();
参照 SFXBrewRandom::GetSInt32 | SFXLCGRandom::GetSInt32 |
SFXMTRandom::GetSInt32