使用模取范围内的随机整数

时间:2018-06-19 17:05:30

标签: javascript php

我的目标是创建一个种子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));
}

0 个答案:

没有答案