我怎样才能做一个“非序列”随机数生成器LCG?

dm7nw8vv  于 2023-03-01  发布在  其他
关注(0)|答案(1)|浏览(141)

我最近创建了一个RNG LCG,公式是:

newSeed = (131173 * actualSeed + 27) % 262144;

但是我有一个问题,这个RNG是用来引入一个种子,然后它会生成一个序列。但是,出于其他原因,我需要为每个数引入一个种子,它由以下条件控制:n * x,n是任意数x是x坐标,这样我就得到了如果n是种子,我想生成一个随机Map,总是会生成相同的.
问题是,这样做相当于:

y = (131173 * x + 27) % 262144

当131173 * x +27等于262144(m)时,这给出了增长并返回到零的数字,这没有给出随机的假象,我已经尝试过在引入种子时,修改种子,以便得到的数字具有更随机的方面,但我不知道这是否工作得很好,我需要建议。
我试过,当种子被输入时,种子是:

x * x

,以及之后

(x * x) | n(seed)

,这确实给了我一个更随机的外观,但我不知道这是否是解决问题的最佳方式。

vi4fp9gy

vi4fp9gy1#

PRNG种子的通常开始是使用一个时间参考,这样你就知道在下一轮,它将从一个新的种子开始。
标准库srand的一个经典例子是

srand (time(NULL));

相关问题