MTToolBox  0.2.10
公開メンバ関数
MTToolBox::EquidistributionCalculatable< U, V > クラステンプレートabstract

このクラスはGF(2)線形疑似乱数生成器の均等分布次元を計算するためのクラスである。 [詳解]

#include <EquidistributionCalculatable.hpp>

MTToolBox::EquidistributionCalculatable< U, V > の継承関係図
MTToolBox::RecursionSearchable< U, V > MTToolBox::AbstractGenerator< U > MTToolBox::ReducibleGenerator< U, V > MTToolBox::TemperingCalculatable< U, V >

公開メンバ関数

virtual ~EquidistributionCalculatable ()
 仮想デストラクタ(必須) [詳解]
 
virtual EquidistributionCalculatable< U, V > * clone () const =0
 自分のコピーを返す。 [詳解]
 
virtual U generate (int outBitLen)=0
 上位(MSBから) outBitLen だけ出力する。 [詳解]
 
virtual void add (EquidistributionCalculatable< U, V > &that)=0
 GF(2)線形疑似乱数生成器の状態空間を加算し、内部状態を変更する。 [詳解]
 
virtual void setZero ()=0
 状態空間をすべてゼロにセットする。 [詳解]
 
virtual bool isZero () const =0
 状態空間がすべてゼロかチェックする。 [詳解]
 
- 基底クラス MTToolBox::RecursionSearchable< U, V > に属する継承公開メンバ関数
virtual ~RecursionSearchable ()
 仮想デストラクタ(必須) [詳解]
 
virtual void setUpParam (AbstractGenerator< V > &generator)=0
 状態遷移関数のパラメータを設定する。 [詳解]
 
virtual const std::string getHeaderString ()=0
 パラメータのヘッダ文字列を返す。 [詳解]
 
virtual const std::string getParamString ()=0
 パラメータの文字列表現を返す。 [詳解]
 
- 基底クラス MTToolBox::AbstractGenerator< U > に属する継承公開メンバ関数
virtual ~AbstractGenerator ()
 仮想デストラクタ(必須) [詳解]
 
virtual U generate ()=0
 内部状態を次状態に遷移し、疑似乱数をひとつ出力する。 [詳解]
 
virtual void seed (U value)=0
 内部状態を初期化する。 [詳解]
 
virtual int bitSize () const =0
 内部状態空間のビットサイズを返す。 [詳解]
 

詳解

template<typename U, typename V = U>
class MTToolBox::EquidistributionCalculatable< U, V >

このクラスはGF(2)線形疑似乱数生成器の均等分布次元を計算するためのクラスである。

GF(2)線形疑似乱数生成器を設計するならば、均等分布次元を計算して おいた方がよいであろう。均等分布次元を計算するためには、出力関数 も含めてGF(2)線形であることが必要である。均等分布次元は状態空間 の大きさによって上限が決まるので、状態空間の大きさを固定した時に どのくらい上限に近づけるかという点に理論的な関心がある。一方、多 変数(多次元)の数値積分などの実際の問題領域においては、均等分布 次元の大きさそのものが問題であり、その点から言えば、状態空間の大 きな疑似乱数生成器を開発し、均等分布次元の値を大きくすることの方 が理論的上限に近いかどうかよりも重要である。

テンプレート引数
U疑似乱数生成器の出力のタイプ、符号なし型でなければならない。
Vパラメータ生成器の出力のタイプ

構築子と解体子

template<typename U, typename V = U>
virtual MTToolBox::EquidistributionCalculatable< U, V >::~EquidistributionCalculatable ( )
inlinevirtual

仮想デストラクタ(必須)

関数詳解

template<typename U, typename V = U>
virtual void MTToolBox::EquidistributionCalculatable< U, V >::add ( EquidistributionCalculatable< U, V > &  that)
pure virtual

GF(2)線形疑似乱数生成器の状態空間を加算し、内部状態を変更する。

警告
配列を使ってラウンドロビン方式で状態空間を保持している場合、 このメソッドを実装する際に、インデックスを一致させて加算することが重要である。 state を状態配列、size を配列のサイズ、index をラウンドロビンの インデックスとすると以下のような加算が必要になる。
for (int i = 0; i < size; i++) {
  state[(index + i) % size] ^= that.state[(that.index + i) % size];
}

参照元 MTToolBox::annihilate().

template<typename U, typename V = U>
virtual EquidistributionCalculatable<U, V>* MTToolBox::EquidistributionCalculatable< U, V >::clone ( ) const
pure virtual

自分のコピーを返す。

覚え書き
clone には問題があるが、テンプレートよりよいと判断する。
戻り値
自分自身のコピー

参照元 MTToolBox::annihilate(), MTToolBox::TestLinearity< U, V >::operator()().

template<typename U, typename V = U>
virtual U MTToolBox::EquidistributionCalculatable< U, V >::generate ( int  outBitLen)
pure virtual

上位(MSBから) outBitLen だけ出力する。

それ以外のビットは0でなければならない。 均等分布次元の計算にとって重要なメソッドである。 このメソッドを実行すると、状態空間の遷移も行われる。

引数
[in]outBitLen上位から何ビット出力するかを指定する。
戻り値
上位 outBitLen 以外は0の出力

参照元 MTToolBox::annihilate().

template<typename U, typename V = U>
virtual bool MTToolBox::EquidistributionCalculatable< U, V >::isZero ( ) const
pure virtual

状態空間がすべてゼロかチェックする。

警告
メルセンヌツイスタのように、欠けた配列を使用する場合は、 真の状態空間がすべてゼロかチェックする必要がある。言い換えると、 必要なマスクをして余分な部分を排除してからゼロチェックする べきである。
戻り値
true なら状態空間がすべてゼロ
template<typename U, typename V = U>
virtual void MTToolBox::EquidistributionCalculatable< U, V >::setZero ( )
pure virtual

状態空間をすべてゼロにセットする。

参照元 MTToolBox::annihilate().


このクラス詳解は次のファイルから抽出されました: