乱数と浮動小数点 - 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 を使用して作成したソースコード


















