MTToolBox
0.2.10
|
データ構造 | |
class | AbstractGenerator |
疑似乱数生成器 [詳解] | |
class | AlgorithmBestBits |
テンパリングパラメータを探索するアルゴリズム(MT用) [詳解] | |
class | AlgorithmCalculateParity |
可約ジェネレータのパリティチェックベクトルを求める。 [詳解] | |
class | AlgorithmEquidistribution |
疑似乱数生成器の均等分布次元を計算する [詳解] | |
class | AlgorithmPartialBitPattern |
疑似乱数生成器の高次元均等分布性を改善するために、テンパ リングパラメータを探索するアルゴリズム [詳解] | |
class | AlgorithmPrimitivity |
原始多項式かどうか判定するアルゴリズムを提供するクラス [詳解] | |
class | AlgorithmRecursionAndTempering |
class | AlgorithmRecursionSearch |
状態遷移関数のパラメータを探索する。 [詳解] | |
class | AlgorithmReducibleEquidistribution |
可約ジェネレータの最悪の場合の均等分布次元を計算する。 [詳解] | |
class | AlgorithmReducibleRecursionAndTempering |
class | AlgorithmReducibleRecursionSearch |
可約ジェネレータの状態遷移関数のパラメータを探索する。 [詳解] | |
class | AlgorithmTempering |
疑似乱数生成器の高次元均等分布性を改善するために、テンパ リングパラメータを探索するアルゴリズム [詳解] | |
class | EquidistributionCalculatable |
このクラスはGF(2)線形疑似乱数生成器の均等分布次元を計算するためのクラスである。 [詳解] | |
class | linear_generator_vector |
GF(2)ベクトルとしてのGF(2)疑似乱数生成器 [詳解] | |
class | MersenneTwister |
Mersenne Twister 疑似乱数生成器 [詳解] | |
class | MersenneTwister64 |
64 bit Mersenne Twister 疑似乱数生成器 [詳解] | |
class | RecursionSearchable |
class | ReducibleGenerator |
このクラスは特性多項式が可約なGF(2)線形疑似乱数生成器を開 発するためのクラスである。 [詳解] | |
class | ReducibleTemperingCalculatable |
class | Sequential |
カウントダウン生成器 [詳解] | |
class | temper_params |
テンパリングパラメータのクラス [詳解] | |
class | TemperingCalculatable |
テンパリングを行う可約ジェネレータは、このクラスを継承す ることによって、TemperingAlgorithmを使用したテンパリングパラメー タ探索が可能になる。 [詳解] | |
class | TestLinearity |
疑似乱数生成器がGF(2)線形であるかどうかテストする [詳解] | |
関数 | |
template<typename U , typename V = U> | |
void | calcCharacteristicPolynomial (RecursionSearchable< U, V > *rand, NTL::GF2X &poly) |
template<typename U , typename V = U> | |
void | calcCharacteristicPolynomial (ReducibleGenerator< U, V > *rand, NTL::GF2X &poly) |
Reducible Generator の特性多項式の計算 実のところ、特性多項式ではなく最小多項式のLCMを計算しているに過ぎない。 次数が一致すれば特性多項式。特性多項式でなくても、MTToolBoxで使用する 範囲内では特に問題はない。 [詳解] | |
template<typename U > | |
void | minpoly (NTL::GF2X &poly, AbstractGenerator< U > &generator, int pos=0, int stateSize=0) |
最小多項式を求める [詳解] | |
bool | isMexp (uint32_t degree) |
2degree -1 が素数となるかどうかを返す [詳解] | |
bool | isIrreducible (const NTL::GF2X &poly) |
既約判定 [詳解] | |
bool | isPrime (const NTL::GF2X &poly) |
原始性判定 [詳解] | |
bool | isPrime (const NTL::GF2X &poly, int degree, const NTL::Vec< NTL::ZZ > &prime_factors) |
原始性判定 [詳解] | |
bool | isPrime (const NTL::GF2X &poly, int degree, const char *prime_factors[]) |
原始性判定 [詳解] | |
bool | hasFactorOfDegree (NTL::GF2X &poly, long degree) |
指定された次数の原始多項式がpolyの因数分解に含まれているか判定する。 [詳解] | |
template<typename U , typename V = U> | |
void | annihilate (EquidistributionCalculatable< U, V > *rg, const NTL::GF2X &poly) |
可約疑似乱数生成器の状態空間を多項式で殲滅する。 [詳解] | |
static int | count_bit (uint16_t x) |
1 の個数を数える [詳解] | |
static int | count_bit (uint32_t x) |
1 の個数を数える [詳解] | |
static int | count_bit (uint64_t x) |
1 の個数を数える [詳解] | |
static uint32_t | reverse_bit (uint32_t x) |
ビットを反転する [詳解] | |
static uint64_t | reverse_bit (uint64_t x) |
ビットを反転する [詳解] | |
template<typename T > | |
int | bit_size () |
T のビットサイズを返す。 [詳解] | |
static void | UNUSED_VARIABLE (void *x) |
使用しない変数のワーニングを止める [詳解] | |
template<typename T > | |
T | floor2p (T n) |
n を越えない最大の2のべき乗を返す。 [詳解] | |
static void | print_binary (std::ostream &os, NTL::GF2X &poly, bool breakline=true) |
出力ストリーム os に多項式 poly を01の文字列で出力する。 [詳解] | |
template<typename T > | |
int | get_range (T input, int start, int end) |
input を start と end の間の数に変換する。 [詳解] | |
template<typename T > | |
void | fill_table (T dist_tbl[], T src_tbl[], int size) |
GF(2)ベクトルのパラメータテーブルから、より高速で冗長なルックアップテーブルを作成する。 [詳解] | |
static int | calc_1pos (uint16_t x) |
入力をビット列とみなして最上位の1の位置を0とした最も右側の(下位の)1の位置を返す。 [詳解] | |
static int | calc_1pos (uint32_t x) |
入力をビット列とみなして最上位の1の位置を0とした最も右側の(下位の)1の位置を返す。 [詳解] | |
static int | calc_1pos (uint64_t x) |
入力をビット列とみなして最上位の1の位置を0とした最も右側の(下位の)1の位置を返す。 [詳解] | |
static void | LCM (NTL::GF2X &lcm, const NTL::GF2X &x, const NTL::GF2X &y) |
多項式の最小公倍数を求める。 [詳解] | |
template<typename U > | |
static void | toGF2Vec (NTL::vec_GF2 &result, U value) |
符号なし整数をGF(2)ベクトルに変換する。 上位ビットがベクトルの初めの要素になる。(デバッグの時見やすいように) [詳解] | |
template<typename U > | |
U | getOne () |
その型の1を返す SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。 [詳解] | |
template<typename U > | |
void | setZero (U &x) |
ゼロをセットする SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。 [詳解] | |
template<typename U > | |
unsigned int | getBitOfPos (U bits, int pos) |
特定位置のビットを求める SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。 [詳解] | |
template<typename U > | |
void | setBitOfPos (U *bits, int pos, unsigned int b) |
変数の指定位置のビットを1または0にセットする SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。 [詳解] | |
template<typename U > | |
static U | fromGF2Vec (NTL::vec_GF2 &value) |
GF(2)ベクトルを符号なし整数に変換する。 上位ビットがベクトルの初めの要素になる。(デバッグの時見やすいように) [詳解] | |
template<typename U > | |
bool | isZero (U x) |
ゼロかどうか、判定する。 SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。 [詳解] | |
template<typename U , typename V > | |
U | convert (V x) |
V 型をU型に変換する SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。 [詳解] | |
const char * | get_mttoolbox_version () |
returns library version [詳解] | |
変数 | |
const AlgorithmPrimitivity | MersennePrimitivity |
状態空間のビットサイズがメルセンヌ指数の疑似乱数生成器の 最小多項式の原始性を判定するアルゴリズム [詳解] | |
const char * | prime_factors2_128_1 [] |
2128-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_160_1 [] |
2160-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_192_1 [] |
2192-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_224_1 [] |
2224-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_256_1 [] |
2256-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_288_1 [] |
2288-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_320_1 [] |
2320-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_352_1 [] |
2352-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_384_1 [] |
2384-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_416_1 [] |
2416-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_448_1 [] |
2448-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_480_1 [] |
2480-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_512_1 [] |
2512-1 の素因数分解に現れる素数のリスト [詳解] | |
const char * | prime_factors2_544_1 [] |
2544-1 の素因数分解に現れる素数のリスト [詳解] | |
MTToolBox の名前空間
void MTToolBox::annihilate | ( | EquidistributionCalculatable< U, V > * | rg, |
const NTL::GF2X & | poly | ||
) |
可約疑似乱数生成器の状態空間を多項式で殲滅する。
U | 疑似乱数生成器の出力の型 |
V | 疑似乱数生成器の内部パラメータを決める際に使う乱数生成器の出力の型 |
[in,out] | rg | 可約疑似乱数生成器 |
[in] | poly | 殲滅多項式 |
参照先 MTToolBox::EquidistributionCalculatable< U, V >::add(), MTToolBox::EquidistributionCalculatable< U, V >::clone(), MTToolBox::EquidistributionCalculatable< U, V >::generate(), MTToolBox::EquidistributionCalculatable< U, V >::setZero().
参照元 MTToolBox::AlgorithmReducibleRecursionAndTempering< U, G >::search().
int MTToolBox::bit_size | ( | ) |
T のビットサイズを返す。
sizeof に 8 を掛けているだけなので正確ではない。
T | ビットサイズを知りたい型 |
|
inlinestatic |
入力をビット列とみなして最上位の1の位置を0とした最も右側の(下位の)1の位置を返す。
1の位置を求めるアルゴリズムは以下のページのものを使用した。
[in] | x | 入力 |
参照先 count_bit().
|
inlinestatic |
入力をビット列とみなして最上位の1の位置を0とした最も右側の(下位の)1の位置を返す。
1の位置を求めるアルゴリズムは以下のページのものを使用した。
[in] | x | 入力 |
[in] | x | 入力 |
参照先 count_bit().
|
inlinestatic |
入力をビット列とみなして最上位の1の位置を0とした最も右側の(下位の)1の位置を返す。
1の位置を求めるアルゴリズムは以下のページのものを使用した。
[in] | x | 入力 |
[in] | x | 入力 |
参照先 count_bit().
void MTToolBox::calcCharacteristicPolynomial | ( | RecursionSearchable< U, V > * | rand, |
NTL::GF2X & | poly | ||
) |
void MTToolBox::calcCharacteristicPolynomial | ( | ReducibleGenerator< U, V > * | rand, |
NTL::GF2X & | poly | ||
) |
Reducible Generator の特性多項式の計算 実のところ、特性多項式ではなく最小多項式のLCMを計算しているに過ぎない。 次数が一致すれば特性多項式。特性多項式でなくても、MTToolBoxで使用する 範囲内では特に問題はない。
U | 疑似乱数生成器の返す値の型 |
V | パラメータ生成器の返す値の型 |
[in,out] | rand | 疑似乱数生成器 |
[in,out] | poly | 特性多項式 |
参照先 MTToolBox::AbstractGenerator< U >::bitSize(), LCM(), minpoly().
|
inline |
V 型をU型に変換する SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。
U | 変換先の型 |
V | 変換元変数の型 |
[in] | x | 変数 |
|
inlinestatic |
1 の個数を数える
レジスタ内SIMDアルゴリズム http://aggregate.org/MAGIC/ より引用
[in] | x | ビットパターン |
参照元 calc_1pos().
|
inlinestatic |
1 の個数を数える
レジスタ内SIMDアルゴリズム http://aggregate.org/MAGIC/ より引用
[in] | x | ビットパターン |
x | ビットパターン |
|
inlinestatic |
1 の個数を数える
レジスタ内SIMDアルゴリズム http://aggregate.org/MAGIC/ より引用
[in] | x | ビットパターン |
x | ビットパターン |
void MTToolBox::fill_table | ( | T | dist_tbl[], |
T | src_tbl[], | ||
int | size | ||
) |
GF(2)ベクトルのパラメータテーブルから、より高速で冗長なルックアップテーブルを作成する。
T | テーブル内の符号なし整数の型 |
[out] | dist_tbl | 作成されるルックアップテーブル |
[in] | src_tbl | 元になるGF(2)ベクトルのテーブル |
[in] | size | dist_tbl のサイズ |
T MTToolBox::floor2p | ( | T | n | ) |
n を越えない最大の2のべき乗を返す。
T | n の整数型 |
[in] | n | 整数 |
|
inlinestatic |
GF(2)ベクトルを符号なし整数に変換する。 上位ビットがベクトルの初めの要素になる。(デバッグの時見やすいように)
[in] | value | 変換元GF(2)ベクトル |
参照先 setBitOfPos(), setZero().
const char* MTToolBox::get_mttoolbox_version | ( | ) |
returns library version
int MTToolBox::get_range | ( | T | input, |
int | start, | ||
int | end | ||
) |
input を start と end の間の数に変換する。
偏りは気にしない。
[in] | input | 入力 |
[in] | start | 範囲の開始 |
[in] | end | 範囲の終了 |
|
inline |
特定位置のビットを求める SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。
U | ビットを求める型 |
[in] | bits | ビット列 |
[in] | pos | ビット位置 |
参照元 minpoly().
|
inline |
その型の1を返す SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。
U | 1を返す型 |
bool MTToolBox::hasFactorOfDegree | ( | NTL::GF2X & | poly, |
long | degree | ||
) |
指定された次数の原始多項式がpolyの因数分解に含まれているか判定する。
この関数は、SFMT, dSFMT の開発で使用される。
[in,out] | poly | GF(2)係数多項式 |
[in] | degree | poly に degree 次の原始多項式が含まれているか |
参照元 MTToolBox::AlgorithmReducibleRecursionSearch< U, V >::start().
bool MTToolBox::isIrreducible | ( | const NTL::GF2X & | poly | ) |
既約判定
[in] | poly | GF(2)係数多項式 |
bool MTToolBox::isMexp | ( | uint32_t | degree | ) |
2degree -1 が素数となるかどうかを返す
メルセンヌ素数の指数のリストを元に判定しているので完全ではない。 疑似乱数生成器として使用する範囲であればカバーしている。
[in] | degree | 判定するべき数 |
bool MTToolBox::isPrime | ( | const NTL::GF2X & | poly | ) |
原始性判定
この原始性判定は簡易版であり、poly の次数がメルセンヌ指数の場合のみ 正しい結果を返す。状態空間のビットサイズがメルセンヌ指数でない場合は、 この関数を使うべきではない。
[in] | poly | GF(2)係数多項式 |
参照元 MTToolBox::AlgorithmRecursionSearch< U, V >::AlgorithmRecursionSearch(), MTToolBox::AlgorithmRecursionAndTempering< U, V >::search(), MTToolBox::AlgorithmRecursionSearch< U, V >::start().
bool MTToolBox::isPrime | ( | const NTL::GF2X & | poly, |
int | degree, | ||
const NTL::Vec< NTL::ZZ > & | prime_factors | ||
) |
原始性判定
この関数は、poly の次数が degree でない場合は false を返す。 prime_factors には2degree-1 の素因数分解に現れる素数の リストを与える。23のように通常は同じ素数を複数含むが、 多重度は考慮せずにひとつの素数を1回だけ含むリストを与えればよい。 prime_factors が正しくないと結果も正しくないであろう。
[in] | poly | GF(2)係数多項式 |
[in] | degree | polyに期待する次数 |
[in] | prime_factors | 2degree-1 の素因数分解に現れる素数のリスト |
bool MTToolBox::isPrime | ( | const NTL::GF2X & | poly, |
int | degree, | ||
const char * | prime_factors[] | ||
) |
原始性判定
この関数は、poly の次数が degree でない場合は false を返す。 prime_factors には2degree-1 の素因数分解に現れる素数の リストを与える。23のように通常は同じ素数を複数含むが、 多重度は考慮せずにひとつの素数を1回だけ含むリストを与えればよい。 prime_factors が正しくないと結果も正しくないであろう。
[in] | poly | GF(2)係数多項式 |
[in] | degree | polyに期待する次数 |
[in] | prime_factors | 2degree-1 の素因数分解に現れる素数のリスト |
|
inline |
ゼロかどうか、判定する。 SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。
U | 変数の型 |
[in] | x | 変数 |
参照元 MTToolBox::linear_generator_vector< U, V >::next_state(), MTToolBox::AlgorithmCalculateParity< U, G >::searchParity().
|
inlinestatic |
void MTToolBox::minpoly | ( | NTL::GF2X & | poly, |
AbstractGenerator< U > & | generator, | ||
int | pos = 0 , |
||
int | stateSize = 0 |
||
) |
最小多項式を求める
U | 疑似乱数生成器の出力の型 |
[out] | poly | 最小多項式 |
[in] | generator | GF(2)疑似乱数生成器 |
[in] | pos | 出力の下位から何ビット目を見るかを指定する |
[in] | stateSize | 状態空間のビットサイズ |
参照先 MTToolBox::AbstractGenerator< U >::bitSize(), MTToolBox::AbstractGenerator< U >::generate(), getBitOfPos().
参照元 calcCharacteristicPolynomial(), MTToolBox::AlgorithmReducibleRecursionSearch< U, V >::start(), MTToolBox::AlgorithmRecursionSearch< U, V >::start().
|
inlinestatic |
出力ストリーム os に多項式 poly を01の文字列で出力する。
次数の低い項の係数が先に出力される。(昇巾順)
[in,out] | os | 出力ストリーム |
[in] | poly | 出力される多項式 |
[in] | breakline | 真なら32文字出力ごとに改行される。 |
|
inlinestatic |
ビットを反転する
入力ビットの上位と下位を反転する。最上位ビットは最下位ビットになる レジスタ内SIMDアルゴリズム http://aggregate.org/MAGIC/ より引用
x | ビットパターン |
|
inlinestatic |
ビットを反転する
入力ビットの上位と下位を反転する。最上位ビットは最下位ビットになる レジスタ内SIMDアルゴリズム http://aggregate.org/MAGIC/ より引用
x | ビットパターン |
x | ビットパターン |
|
inline |
変数の指定位置のビットを1または0にセットする SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。
U | 変数の型 |
[in,out] | bits | 指定位置のビットをセットする変数 |
[in] | pos | 指定位置 |
[in] | b | ビット, 0または1 |
参照元 fromGF2Vec().
|
inline |
ゼロをセットする SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。
U | 0をセットする型 |
[out] | x | ゼロをセットする変数 |
参照元 fromGF2Vec(), MTToolBox::linear_generator_vector< U, V >::linear_generator_vector(), MTToolBox::AlgorithmCalculateParity< U, G >::searchParity().
|
inlinestatic |
符号なし整数をGF(2)ベクトルに変換する。 上位ビットがベクトルの初めの要素になる。(デバッグの時見やすいように)
U | 変換元の型 |
[out] | result | 結果のGF(2)ベクトル |
[in] | value | 変換元符号なし整数 |
|
inlinestatic |
使用しない変数のワーニングを止める
[in] | x | 使用しない変数へのポインタ |
const AlgorithmPrimitivity MTToolBox::MersennePrimitivity |
状態空間のビットサイズがメルセンヌ指数の疑似乱数生成器の 最小多項式の原始性を判定するアルゴリズム
参照元 MTToolBox::AlgorithmRecursionSearch< U, V >::AlgorithmRecursionSearch().
const char* MTToolBox::prime_factors2_128_1[] |
2128-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_160_1[] |
2160-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_192_1[] |
2192-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_224_1[] |
2224-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_256_1[] |
2256-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_288_1[] |
2288-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_320_1[] |
2320-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_352_1[] |
2352-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_384_1[] |
2384-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_416_1[] |
2416-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_448_1[] |
2448-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_480_1[] |
2480-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_512_1[] |
2512-1 の素因数分解に現れる素数のリスト
const char* MTToolBox::prime_factors2_544_1[] |
2544-1 の素因数分解に現れる素数のリスト