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