ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング : SophiaFramework 逆引き FAQ・コード集

乱数を取得する

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