マニュアルページ tasksim.3




名前

     tasksim - タスクライブラリ用のヒストグラムと乱数


形式

     #include <task.h>
     struct histogram {
          // 公開されたデータメンバー
          int  l, r;          // ヒストグラムの左右の境界
          int  binsize;       // 各ビンのサイズ
          int  nbin;          // ビンの数
          int* h;             // 記憶領域へのポインタ
          long sum;           // 全エントリの総数
          long sqsum;         // 全エントリの 2 乗の合計
          // 公開されたコンストラクタ
          histogram(int bins=16, int left=0, int right=16);
          // 公開された関数
          void add(int val);
          void print();
     };
     class randint {
     public:
          // 公開されたコンストラクタ
          randint(long seed=0);
          // 公開された関数
          int  draw();
          float     fdraw();
          double    ddraw();
          void seed(long);
     };
     class urand: public randint {
     public:
          // 公開されたデータメンバー
          int  low, high;
          // 公開されたコンストラクタ
          urand(int lo, int hi);
          // 公開された関数
          int  draw();
     };
     class erand : public randint {
     public:
          // 公開されたデータメンバー
          int  mean;
          // 公開されたコンストラクタ
          erand(int m);
          // 公開された関数
          int  draw();
     };


機能説明

     タスクライブラリには、データを収集したり、乱数を生成するため
     のクラスが含まれています。これらのクラスは特にシミュレーショ
     ンに利用できます。

  ヒストグラム
     histogram hist(bins, left, right);
          空のヒストグラム・オブジェクト hist を作成します。こ の
          オブジェクトには、 hist.h[0] から hist.h[bins-1] までの
          範囲の bins 個の区間 (bin) が含まれます。 int 型の引 数
          left および right はそれぞれ、データメンバー l および r
          に代入され、ヒストグラムの左端と右端になります。デ フォ
          ルト値は、0 から 16 までの範囲を含む 16 区間です。

     hist.add(val)
          ヒストグラムの値 val に対応する区間に 1 を加算します  (
          val  は int 型)。データメンバー sum および sqsum を更新
          します。 val が l から r までの範囲にないとき、範囲を倍
          に 拡 張 することを繰り返してその値が含まれるようにしま
          す。しかし、区間の数は変化しないため、各区間は範囲に 比
          例 して広がり、カウントは拡張された範囲を反映するように
          調整されます。

     hist.print()
          ヒストグラム hist のゼロ以外の区間のそれぞれの中にあ る
          エントリの数を stdout ( cout ではない) に出力します。

  乱数
     タスクライブラリには、一様分布または指数分布の疑似乱数を生成
     す る  3  つのクラスが用意されています。各クラスオブジェクト
     は、それぞれ独立した疑似乱数値の列を生成します。

     クラス randint は、0 から INT_MAX までの範囲の一様な乱数を生
     成します。

     randint ri(s);
          randint クラスのオブジェクト ri を作成します。省略可 能
          な  long 型の引数は、このオブジェクトのジェネレータの開
          始シードを設定します。

     int i = ri.draw();
          閉区間 [0 ..  INT_MAX] 上の一様な疑似乱数シーケンスの次
          の値を int 型の値として返します。

     float f = ri.fdraw();
          半開区間 [0.0 .. 1.0] 上の一様な疑似乱数シーケンスの 次
          の値を float 型の値として返します。

     double d = ri.ddraw();
          半開区間 [0.0 .. 1.0] 上の一様な疑似乱数シーケンスの 次
          の値を double 型の値として返します。

     ri.seed(s)
          指定された long 型の値をシードとして、ジェネレータを 初
          期化しなおします。


     クラス urand は、 randint から派生されるもので、特定の範囲の
     一様な疑似乱数を生成します。

     urand ur(lo, hi);
          urand オブジェクト ur を作成します。 long 型の引 数  lo
          および hi は、それぞれ範囲の下限値と上限値を表します。

     int i = ur.draw();
          閉区間 [lo .. hi] 上の一様な疑似乱数シーケンスの次の 値
          を int 型の値として返します。

     クラス erand は randint から派生するもので、特定の値を平均値
     とする指数乱数を生成します。

     erand er(m);
          erand クラスのオブジェクト er を作成します。 int 型の引
          数 m は、生成する乱数シーケンスの平均値を表します。

     int i = er.draw();
          m を平均値とする指数乱数シーケンスの次の値を int 型の値
          と して返します。この関数は C 数学ライブラリ関数 log を
          使用するため、この関数を含むプログラムは -lm を使用して
          リンクする必要があります。


診断

     task(3C++) 参照。


関連項目

     task.intro(3C++)、 interrupt(3C++)、 queue(3C++)、
     task(3C++)