ホーム > デベロッパ > BREW プログラミング入門 > 乱数と浮動小数点 > - 3 / 3 -

乱数と浮動小数点 - 3 / 3 -

SophiaFramework によるアプリ

SFMathApp は、乱数アルゴリズムと sin 関数のデモアプリです。

乱数のデモは、BREW、、LCG (線形合同法)、MT (メルセンヌ ツイスター法)からアルゴリズムを選択します。乱数の発生回数も設定します。

sin 関数のデモは、Normal と High Speed の二つのモードがあります。High Speed モードでは、90°の区間を任意の数に分割して sin 関数を高速に計算します。

最初に、デモの種類を選択できるメニューを表示します。
乱数デモの状況です。
Normal モードでの sin 関数デモの状況です。
10 分割の High Speed モードでの sin 関数デモの状況です。

SophiaFramework の乱数クラス

SFXBrewRandom は、BREW 標準のシード設定できない乱数を発生させるためのクラスです。

SophiaFramework には、シードを設定して乱数を発生させるためのクラスが 2 つ用意されています。

■使用例

    // 二つの乱数クラスは同じインターフェースを持っている
    //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 分割した三角関数テーブルになります。