硬币翻转,哪种方式会产生更准确的50%

时间:2017-03-18 21:34:35

标签: math random swift3

我对此非常好奇,并不是真的那么重要,但考虑到这两个代码块,哪个会更准确地产生50%的概率?

let x = arc4random_uniform(2) //Between 0 & 1
let coin = x == 0 ? "heads" : "tails"

let x = arc4random_uniform(5000)
if x.truncatingRemainder(dividingBy: 2) == 0 {
   coin = "heads"
}

2 个答案:

答案 0 :(得分:3)

概率上它们应该是相同的,因为它们都使用latitude,它承诺在所有结果同样可能在所需范围内的情况下给出结果。然而,第二个将会做更多的工作,因为模运算和因为5000不是2的幂,所以it will actually be doing some acceptance/rejection在后台避免modulo bias并保证{的均匀性{1}}。坚持第一个。

答案 1 :(得分:0)

他们似乎对我来说都是随机的。也许尝试在循环中运行它来测试它并记录答案。