我对此非常好奇,并不是真的那么重要,但考虑到这两个代码块,哪个会更准确地产生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"
}
答案 0 :(得分:3)
概率上它们应该是相同的,因为它们都使用latitude
,它承诺在所有结果同样可能在所需范围内的情况下给出结果。然而,第二个将会做更多的工作,因为模运算和因为5000不是2的幂,所以it will actually be doing some acceptance/rejection在后台避免modulo bias并保证{的均匀性{1}}。坚持第一个。
答案 1 :(得分:0)
他们似乎对我来说都是随机的。也许尝试在循环中运行它来测试它并记录答案。