使用:
value = arc4random() % x
如何避免或消除模偏差?
至少根据维基百科的说法,在编程机会游戏时,模偏差是一个问题.
使用arc4random_uniform(x)
.这适合你.
根据手册页:
arc4random_uniform()
将返回一个小于的均匀分布的随机数upper_bound
.arc4random_uniform()
建议使用结构,arc4random() % upper_bound
因为当上限不是2的幂时,它避免了"模偏差".
arc4random返回一个32位无符号整数(0到2 32 -1).
对于足够小的x,可能没有明显的模偏差.但是,如果您想要确定,请执行以下操作:
Y = 2 p,其中2 P-1
val = arc4random() % y; while(val >= x) val = arc4random() % y;