namespace PokeRNG {
    template<typename UIntType, UIntType mul, UIntType add, UIntType mask>
    class LCG;
}

typedef LCG<u64, 0x5D588B656C078965, 0x269EC3, 0xFFFFFFFFFFFFFFFF> LCG5Gen;
typedef LCG<u32, 0x41C64E6D, 0x6073, 0xFFFFFFFF> LCG4Gen;
typedef LCG<u32, 0x41C64E6D, 0x6073, 0xFFFFFFFF> LCG3Gen;

LCGは線形合同法と呼ばれる擬似乱数列生成アルゴリズムに関するクラスである。
3世代と4世代のLCGは同一であり,32bit周期の乱数列を生成する。
5世代のLCGは64bit周期の乱数列を生成する。


名前 説明
LCG(); LCGの逆関数が初期化される。
UIntType next(UIntType) const; 線形合同法による1個次の乱数を返す。
UIntType prev(UIntType) const; 線形合同法による1個前の乱数を返す。
UIntType next_n(UIntType, UIntType) const; 線形合同法によるn個次の乱数を返す。
UIntType prev_n(UIntType, UIntType) const; 線形合同法によるn個前の乱数を返す。
UIntType index(UIntType) const; 0からいくつ線形合同法による乱数を次に進めたか計算する。
200x200