var Random = function(seed) {
var A = 1103515245,
C = 12345,
M = 0x80000000;
seed = seed || 1;
return {
rnd: function() {
seed = (A * seed + C) % M;
return seed / M;
},
seed: function(s) {
seed = s;
}
};
};
var seedInp = document.querySelector('#seed');
var out = document.querySelector('#out');
document
.querySelector('#rndBtn')
.addEventListener(
'click',
function() {
var numbers = [];
var random = new Random(seedInp.value);
for (var i = 0; i < 200; i++) {
numbers.push(random.rnd());
}
out.innerHTML = numbers.join('\n');
}
);
如果没有安全要求,经典的线性同余法可以是一个可接受的解决方案。
minstd_rand考虑到 JavaScript 的细节,从标准函数中获取生成器参数更容易c++11:在将
multiplier(48271) 乘以最大值seed(2147483646) 的情况下,结果为 103661183076066,小于 JavaScript 中可能的最大安全整数9007199254740991。要验证结果,您可以使用以下代码
c++11:链接到实际的 C++ 代码。这两个选项在 1000 次迭代序列结束时给出相同的结果:
如何将结果限制在一个范围内,我想你知道。
Mersenne Twister 或任何线性全等使用。您也可以从 Knut 或 glibc 获取它
总的来说,我决定回答我自己的问题,也许有人会发表评论,也许我做错了什么。
使用维基文章线性同余法中的示例
唯一的事情:我排除了数字的截断(例如),而不是整数,我返回了一个从 0 到 1.0 的小数。