可逆线性同余生成器
伪随机数生成器的仅标头实现,支持在两个方向上生成随机数。
什么是可逆的?
大多数随机数生成器仅支持在一个方向上生成数字:
Rng myRng (seed)
int rnd1 = myRng.next();
int rnd2 = myRng.next();
int rnd3 = myRng.next();
使用此实现,您可以执行以下操作:
rlcg::Reversible myRng (seed);
int rnd1 = myRng.next();
int rnd2 = myRng.next();
int rnd3 = myRng.prev(); // rnd3 == rnd1
int rnd4 = myRng.next(); // rnd4 == rnd2
我为什么要这个?
有时从当前随机数回溯到先前的随机数而不沿途存储它们是有用的。 这个实现在内部只存储了一