【发布时间】:2013-05-28 21:20:26
【问题描述】:
我目前正在用 JavaScript 再现康威的生命游戏,我注意到函数 Math.random() 总是返回某种模式。以下是 100x100 网格中的随机结果示例:
有人知道如何获得更好的随机数吗?
ApplyRandom: function() {
var $this = Evolution;
var total = $this.Settings.grid_x * $this.Settings.grid_y;
var range = parseInt(total * ($this.Settings.randomPercentage / 100));
for(var i = 0; i < total; i++) {
$this.Infos.grid[i] = false;
}
for(var i = 0; i < range; i++) {
var random = Math.floor((Math.random() * total) + 1);
$this.Infos.grid[random] = true;
}
$this.PrintGrid();
},
[更新]
我在这里创建了一个 jsFiddle:http://jsfiddle.net/5Xrs7/1/
[更新]
看来 Math.random() 毕竟没问题(感谢raina77ow)。对不起各位! :(。如果你对结果感兴趣,这里是游戏的更新版本:http://jsfiddle.net/sAKFQ/
(但我认为还有一些错误......)
【问题讨论】:
-
你能给我们看一些代码@Danny吗?
-
赞成@Dogbert,看起来确实像一个XY问题。 Math.random() 本身非常随机。它的结果可能是可以预测的(如论文here 所示),但它绝对不遵循此处所示的如此清晰的模式。还有其他问题。
-
其实我冒昧地创建了这样一个fiddle。正如预期的那样,Math.random() 给出了相当混乱的模式。我什至没有修复原始代码的一个错误,按原样使用它。
-
我知道这个问题现在已经解决了,毕竟
Math.Random()不是问题,但为了其他遇到类似问题的人的利益,值得重复一句格言:任何时候你认为你在你正在使用的库中发现了一个错误,它实际上是你自己的代码中的一个错误的可能性非常高,而不是在核心库中。杰夫阿特伍德说得比我说的好得多,所以我将在这里链接到他的博客:The 1st Rule Of Programming: It's Always Your Fault
标签: javascript math random