【发布时间】:2014-02-28 18:55:52
【问题描述】:
我使用了两种不同的随机化方法,一种给出的结果的方差符合我的预期,另一种方法给出的结果也有偏差,而且也非常一致。
方法:
function randomA() {
var raw = Number((Math.random()+'').substr(2));
return raw % NUM_OF_POSSIBLES;
}
function randomB() {
var raw = Math.round(Math.random()*10000);
return raw % NUM_OF_POSSIBLES;
}
当NUM_OF_POSSIBLES = 2 第一种方法 (randomA()) 产生相当一致的零 (64%) 和 36% 的 1。而radnomB() 几乎是 50/50。
如果NUM_OF_POSSIBLES = 5 再次以非常一致的方式倾斜第一种方法:
0: 10%, 1: 23%, 2: 22%, 3: 22%, 4: 23%,而第二个给每个结果大约 20%。
您可以在此处找到包含多个测试的完整代码:jsfiddle
为什么第一种方法偏斜,为什么偏斜一致?
【问题讨论】:
-
有些事情让我觉得这是因为你在模数之前增加了数字的大小,但对于我的生活,我想不出为什么。这可能与
Number()格式化输出的方式有关。尽管。如果没有*10000,两者之间是否一致? -
@Askanison4 我希望我能同意(或反驳!)但我自己也很困惑,办公室里的人对此有点发疯:D
-
@Askanison4 如果我不乘我不能模,但如果我只乘以 100 结果保持不变。
标签: javascript random