![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
乱数クラスは 3 種類あります。
表 19.1. 乱数クラス
| クラス名 | 乱数の生成方法 |
|---|---|
| SFXBrewRandom | BREWの乱数生成関数を利用した乱数生成クラスです。 |
| SFXLCGRandom | 線形合同法 ( LCG 法) による乱数生成クラスです。 |
| SFXMTRandom | Mersenne Twister ( MT 法) による乱数生成クラスです。 |
例 19.2. SFXBrewRandom の使い方
// UINT32_MINIMUM 〜 UINT32_MAXIMUM の間の乱数を生成する SInt32 n1 = SFXBrewRandom::GetSInt32(); // 0 〜 UINT08_MAXIMUM の間の乱数を生成する UInt08 n2 = SFXBrewRandom::GetUInt08(); // Float64 の乱数を生成する Float64 n3 = SFXBrewRandom::GetFloat64(); Bool b = SFXBrewRandom::GetBool(); // Bool 型の乱数を生成する // Bool b = static_cast<Bool>(SFXBrewRandom::GetUInt32() % 2); // と書くよりも品質のよい乱数が得られる
各数値型に対応した乱数生成関数があります。
各関数で生成できる乱数の上限値は 各型の最大値・最小値を表すマクロ に記載されています。
例 19.3. SFXLCGRandom の使い方
// シードを設定しない場合 // シードは現在の時刻を元に設定される SFXLCGRandom random; // UINT32_MINIMUM 〜 UINT32_MAXIMUM の間の数 SInt32 n1 = random.GetSInt32(); // 乱数を生成する random.Randomize(3456); // シードを設定する // 0 〜 UINT08_MAXIMUM の間の数 UInt08 n2 = random.GetUInt08(); // 乱数を生成する
SFXLCGRandom クラスは、UNIX の drand48 関数と同一のアルゴリズムを使って 48 ビットの乱数を生成します。
同じシードからは同じ乱数列が生成されます。
例 19.4. SFXMTRandom の使い方
// シードを設定しない場合 // シードは現在の時刻を元に設定される SFXMTRandom random; // UINT32_MINIMUM 〜 UINT32_MAXIMUM の間の数 SInt32 n1 = random.GetSInt32(); // 乱数を生成する random.Randomize(3456); // シードを設定する // 0 〜 UINT08_MAXIMUM の間の数 UInt08 n2 = random.GetUInt08(); // 乱数を生成する
SFXMTRandom クラスは、メルセンヌ・ツイスター法のアルゴリズムを使って乱数を生成します。
同じシードからは同じ乱数列が生成されます。
![]() |
注意 |
|---|---|
| SFXMTRandom クラスの使い方は SFXLCGRandom クラスと同じです。 | |
![]() |
メモリの消費 |
|---|---|
SFXMTRandom クラスのインスタンスは 2.5 K バイト程度のメモリを消費します。 スタック容量が不足する場合はヒープ上にSFXMTRandom クラスのインスタンスを作成します。 | |
SFXTrigonometric はテーブルを使って三角関数の演算をするクラスです。
例 19.5. SFXTrigonometric クラス の使い方
SFXTrigonometric table; // 三角関数テーブルを初期化する // この処理は時間を要する table.Initialize(); SInt32 i; for (i = 0; i < 1000; ++i) { // 高速な三角関数の演算 Float64 n1 = table.Sin(i); Float64 n2 = table.Cos(i); Float64 n3 = table.Tan(i); // n1, n2, n3 を使う処理 }
SFXTrigonometric には度数法と弧度法の変換関数も用意されています。
標準の BREW では利用できない浮動小数点演算や RealViewコード生成ツール ( ARM RealView Compilation Tools for BREW V1.2 ) で提供される数学関数が使えます。
例 19.7. RealView コード生成ツールの数学関数
// マクロ ( 各マクロの具体的な値はコンパイラによって異なる場合があります ) HUGE_VAL INFINITY NAN // 関数 Float64 acos(Float64) Float64 asin(Float64) Float64 atan(Float64) Float64 atan2(Float64, Float64) Float64 cos(Float64) Float64 sin(Float64) Void __use_accurate_range_reduction(Void) // VC++ では使えません Float64 tan(Float64) Float64 cosh(Float64) Float64 sinh(Float64) Float64 tanh(Float64) Float64 exp(Float64) Float64 frexp(Float64, int*) Float64 ldexp(Float64, int) Float64 log(Float64) Float64 log10(Float64) Float64 modf(Float64, Float64Ptr) Float64 pow(Float64, Float64) Float64 sqrt(Float64) Float64 _sqrt(Float64) // VC++ では sqrt(Float64) を使います Float32 _sqrtf(Float32) // VC++ では sqrtf(Float64) を使います Float64 ceil(Float64) Float64 fabs(Float64) Float32 _fabsf(Float32) // VC++ では fabsf(Float32) を使います Float32 fabsf(Float32) Float64 floor(Float64) Float64 fmod(Float64, Float64) Float64 acosh(Float64) // VC++ では使えません Float64 asinh(Float64) // VC++ では使えません Float64 atanh(Float64) // VC++ では使えません Float64 cbrt(Float64) // VC++ では使えません Float64 copysign(Float64, Float64) // VC++ では float.h をインクルードして // _copysign(Float64, Float64) を使います Float64 erf(Float64) // VC++ では使えません Float64 erfc(Float64) // VC++ では使えません Float64 expm1(Float64) // VC++ では使えません Float64 finite(Float64) // VC++ では float.h をインクルードして // _finite(Float64) を使います Float64 gamma(Float64) // VC++ では使えません Float64 gamma_r(Float64, int*) // VC++ では使えません Float64 hypot(Float64, Float64) int ilogb(Float64) // VC++ では使えません Float64 isnan(Float64) // VC++ では float.h をインクルードして // _isnan(Float64) を使います Float64 j0(Float64) // VC++ では _j0(Float64) を使います Float64 j1(Float64) // VC++ では _j1(Float64) を使います Float64 jn(int, Float64) // VC++ では _jn(int, Float64) を使います Float64 lgamma(Float64) // VC++ では使えません Float64 lgamma_r(Float64, int*) // VC++ では使えません Float64 log1p(Float64) // VC++ では使えません Float64 logb(Float64) // VC++ では使えません Float64 nextafter(Float64, Float64) // VC++ では float.h をインクルードして // _nextafter(Float64, Float64) を使います Float64 remainder(Float64, Float64) // VC++ では使えません Float64 rint(Float64) // VC++ では使えません Float64 scalb(Float64, Float64) // VC++ では float.h をインクルードして // _scalb(Float64, SInt32) を使います Float64 scalbn(Float64, int) // VC++ では float.h をインクルードして // _sclab(Float64, SInt32) を使います Float64 significand(Float64) // VC++ では使えません Float64 y0(Float64) // VC++ では _y0(Float64) を使います Float64 y1(Float64) // VC++ では _y1(Float64) を使います Float64 yn(int, Float64) // VC++ では _yn(int, Float64) を使います // C++ 環境用に提供されている関数 Float64 abs(Float64) Float32 abs(Float32) Float32 acos(Float32) Float32 asin(Float32) Float32 atan(Float32) Float32 atan2(Float32, Float32) Float32 ceil(Float32) Float32 cos(Float32) Float32 cosh(Float32) Float32 exp(Float32) Float32 fabs(Float32) Float32 floor(Float32) Float32 fmod(Float32, Float32) Float32 frexp(Float32, int*) Float32 ldexp(Float32, int) Float32 log(Float32) Float32 log10(Float32) Float32 modf(Float32, Float32Ptr) Float32 pow(Float32, Float32) Float32 pow(Float32, int) Float32 sin(Float32) Float32 sinh(Float32) Float32 sqrt(Float32) Float32 _sqrt(Float32) // VC++ では sqrt(Float32) を使います Float32 tan(Float32) Float32 tanh(Float32) Float64 pow(Float64, int)
![]() |
math.h のインクルード |
|---|---|
RealViewコード生成ツールの数学関数を使うとき math.h のインクルードは不要です。 | |
|
Copyright (C) 2002 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|