我的目标是创建一个种子PRNG,以在Javascript和PHP中生成相同的数字。我找到了一个在两个环境中都可以工作的线性同余生成器,但是我的问题是,如果使用除法将其生成在所需的范围内,那么Javascript和PHP的浮动精度不同意味着数字会略有不同。
我不确定在我的特定情况下是否会出现问题(我不需要大于100的数字),但是为了解决这个问题,我尝试使用模运算符。如我所料,由于PRNG生成的数字相对较小,因此,随着数字的增加,每个数字出现的可能性会减小。
是否有任何(可能很简单的)算法在客户端和服务器端都能可靠地工作?
这是Javascript中的生成器,它使用取模运算符获取范围内的整数,以及一些代码,表明较高的数字出现的频率较低
function SeededRandom(newSeed) {
this.seed = newSeed;
this.Random = function (max) {//max value not included
this.seed = (this.seed * 20077 + 12345) % 32768;
return this.seed % max;
}
}
const MAX_ITER = 1000000;
const MAX_VALUE = 10000;
let random = new SeededRandom(123456);
let array = new Array(MAX_VALUE).fill(0);
for (let iii = 0; iii < MAX_ITER; iii++) {
array[random.Random(MAX_VALUE)]++;
}
for (let iii = 0; iii < MAX_VALUE; iii++) {
console.log(iii + ". " + (array[iii] / MAX_ITER));
}