乱数と浮動小数点 - 3 / 3 -
SophiaFramework によるアプリ
SFMathApp は、乱数アルゴリズムと sin 関数のデモアプリです。
乱数のデモは、BREW、、LCG (線形合同法)、MT (メルセンヌ ツイスター法)からアルゴリズムを選択します。乱数の発生回数も設定します。
sin 関数のデモは、Normal と High Speed の二つのモードがあります。High Speed モードでは、90°の区間を任意の数に分割して sin 関数を高速に計算します。
関連情報:" Wikipedia : 擬似乱数 "
関連情報:" メルセンヌツイスターホームページ "
- 最初に、デモの種類を選択できるメニューを表示します。
- 乱数デモの状況です。
- Normal モードでの sin 関数デモの状況です。
- 10 分割の High Speed モードでの sin 関数デモの状況です。
SophiaFramework の乱数クラス
SFXBrewRandom は、BREW 標準のシード設定できない乱数を発生させるためのクラスです。
SophiaFramework には、シードを設定して乱数を発生させるためのクラスが 2 つ用意されています。
- SFXLCGRandom : 線形合同法による乱数クラス
- SFXMTRandom : メルセンヌツイスター法による乱数クラス
■使用例
// 二つの乱数クラスは同じインターフェースを持っている //SFXLCGRandom random; SFXMTRandom random; SInt16 i; // シードを設定しない場合には現在の時刻を // 元にして乱数列が生成されます。 for (i = 0; i < 10; ++i) { TRACE("%d", random.GetSInt32()); } TRACE("---"); // 明示的にシードを設定して乱数列を生成 random.Randomize(9999); for (i = 0; i < 10; ++i) { TRACE("%d", random.GetSInt32()); }
浮動小数点演算と三角関数
SophiaFramework では、通常の C 言語で記述できる浮動小数点演算と数学関数が用意されています。
■SophiaFramework で使える数学関数の例
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) ... // その他、RVCTB コンパイラの提供する全ての数学関数
三角関数を高速計算するための SFXTrigonometric クラスも用意されています。
■SFXTrigonometric クラスの使用例
SFXTrigonometric tri; SInt16 i; Float64 temp; // 最初に三角関数テーブルを初期化する (デフォルトは 1°刻みの三角関数テーブル) if (tri.Initialize() == SFERR_NO_ERROR) { for (i = 0; i < 10; ++i) { // 三角関数テーブルから sin 値を計算 temp = tri.Sin(i * 9 * PI / 180); TRACE("%d", static_cast<SInt32>(temp * 10000.0)); } }
分割数パラメータを省略すると、ラジアン区間 [0, π/ 2] を 1°刻みで 90 分割した三角関数テーブルになります。
記事掲載プログラムのソースコード
SophiaFramework UNIVERSE を使用して作成したソースコード