Permuted congruential generator
PCGにはいくつかの種類がある。内部で使用する線形合同法は8ビットから128ビットのものが使用される。実用的な用途では64ビットと128ビットのものだけが推奨される。それより小さいものは統計的性質のテストに使用される。
線形合同法で加算される定数は異なる乱数列を生成するために異なる値を使用できる。定数は任意の奇数で、明示的に指定する必要はない。最下位のビットを1にすれば状態を保持する変数のアドレスを使ってもよい。
状態を出力に変換する方法がいくつかある。どの方法もうまく働くが、それぞれ余裕の幅が異なる。変換方法は以下の要素によって構築される。
RR: ランダムな(入力に依存する)ビット回転で、入力の半分の長さの出力になる。 2 b {\displaystyle 2^{b}} ビットの入力の最上位の b − 1 {\displaystyle b-1} ビットが回転量を決めるのに使われ、そのすぐ下の 2 b − 1 {\displaystyle 2^{b-1}} ビットが右に回転され出力され、残りの下位 2 b − 1 − ( b − 1 ) {\displaystyle 2^{b-1}-(b-1)} ビットは捨てられる。
RS: ランダムな(入力に依存する)ビットシフト。ビット回転の計算時間が長いときに使用する。