Math 投币,哪种方式更准确50%

Math 投币,哪种方式更准确50%,math,random,swift3,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" } 从概率上讲,它们应该是相同的,因为

我对此很好奇,其实这并不重要,但考虑到这两个代码块,哪一个会更准确地产生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"
}

从概率上讲,它们应该是相同的,因为它们都使用
arc4random_uniform
,这承诺在所有结果都在期望范围内的情况下给出结果。然而,由于模运算和5000不是2的幂,因此第二个将做更多的工作,因此在后台避免并保证
x
的均匀性。坚持第一条

它们在概率上应该是相同的,因为它们都使用
arc4random_uniform
,这承诺在所有结果都在期望范围内的情况下给出结果。然而,由于模运算和5000不是2的幂,因此第二个将做更多的工作,因此在后台避免并保证
x
的均匀性。坚持第一条

对我来说,它们似乎都是同样随机的。也许可以试着在一个循环中运行它来测试它并记录答案。

它们对我来说都是同样随机的。也许可以试着在循环中运行它来测试它并记录答案。

非常好的答案。感谢you@TheValyreanGroup很高兴能帮上忙。回答得很好。感谢you@TheValyreanGroup很高兴能帮上忙。