PCG (Permuted Congruential Generator)

線形合同法(LCG)を状態遷移関数として使い、出力段に「permutation(並べ替え)」処理を加えることでLCGの弱点を補う設計の疑似乱数生成器(PRNG)。PCG, A Family of Better Random Number Generatorsとして公開されている。

仕組み

単純なLCGは下位ビットの周期が短い・統計的な規則性が現れやすいといった弱点を持つ。PCGはLCGの生の出力をそのまま返すのではなく、下位ビットを捨てたうえで追加のpermutation関数を通して出力することで、内部状態よりもはるかにランダムに見える出力を作る。

状態サイズと性能

状態サイズは典型的に64bitと、Mersenne Twister(624×32bit)やXoshiro256**(256bit)と比べて小さい。32bit出力の生成速度でMersenne Twisterの2〜5倍(35Gb/s超 vs MTの13〜27Gb/s)というベンチマークが報告されており、Mersenne TwisterからPCGへ置き換えることでシミュレーションの実行時間が20〜40%短縮された事例もある。

Philoxと同様、暗号強度は主張しない「medium-strength」の生成器に分類される。

疑似乱数生成器の中での位置づけ

Mersenne Twisterの弱点(状態サイズの大きさ、LinearComp検定の失敗)を踏まえた後継世代の一つ。設計思想は「LCG+出力permutation」というシンプルなもので、Xoshiro256**(XOR+shift+rotate)やPhilox(カウンタベース)とは異なるアプローチで高速・高品質を両立している。

#random

出典

作成日時: 2026-08-21 12:23 / 更新日時: 2026-08-21 12:23