TASKSIM(3C++)

名前
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++)