问题:
我正在尝试使用javascript创建RNG随机数生成器,我的目标是让RNG使用种子值生成随机数,这几乎不可能预测随机数的模式。
代码从这里开始:
var digits = 10,
seed = 9999199999;
function nextRand() {
var n = (seed * seed).toString();
while (n.length < digits * 2) {
n = "0" + n;
}
var start = Math.floor(digits / 2),
end = start + digits;
seed = parseInt(n.substring(start, end));
return seed;
}
function nextRandFloat() {
return nextRand() / 9999999999;
}
for (var i = 0; i < 20; i++) {
console.log(nextRandFloat());
}
var results = [];
for (var i = 0; i < 100000; i++) {
var rand = nextRand();
if (results[rand]) {
break;
}
results[rand] = true;
}
console.log(i);
我已经在很多javascript编辑器中运行了这个代码,但我没有得到任何人可以请任何人解释我做错了什么。
答案 0 :(得分:0)
你的代码似乎对我有用
var digits = 10;
var seed = 9999199999;
function nextRand() {
var n = (seed * seed).toString();
while (n.length < digits * 2) {
n = "0" + n;
}
var start = Math.floor(digits / 2),
end = start + digits;
seed = parseInt(n.substring(start, end));
return seed;
}
function nextRandFloat() {
return nextRand() / 9999999999;
}
for (var i = 0; i < 20; i++) {
console.log(nextRandFloat());
}
var results = [];
for (var i = 0; i < 100000; i++) {
var rand = nextRand();
if (results[rand]) {
break;
}
results[rand] = true;
}
console.log(i);
&#13;
答案 1 :(得分:0)
如果您在网页上运行此代码而未将其封装在<script>
标记中,则浏览器将无法执行该脚本。您可以在Stackoverflow,jsfiddle.net和codepen.io上运行此脚本,而不使用这些标记,因为这些环境的设计方式。
此外,您不会在网页上看到任何输出,因为脚本将输出记录到控制台。如果您使用谷歌浏览器,请转到开发人员工具,您可以看到记录的输出。当我检查控制台时,出现以下输出:
0.0006200016000620002 0.03844019840384402 0.7648853031764885 0.952689837895269 0.7927047390792705 0.08032330580803233 0.18334546401833454 0.5559169375555917 0.364139937836414 0.789430098778943 0.9880733491988073 0.894320169089432 0.8564680188856468 0.7467227197746723 0.4820116164482012 0.5198344540519835 0.7859565478785957 0.7695029693769503 0.4819761516481976 0.10107111461010711 20570
注意,您不必总是对脚本标记进行硬编码,您可以使用JavaScript或jQuery按照discussion动态添加它们。