# マニュアルページ 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++)