Bre*_*ler 43 random objective-c arc4random
所以我看过关于Obj中随机和arc4random之间差异的旧帖子.C,我已经在网上看到了这个答案,但我并没有真正理解答案,所以我希望有人可以用更容易理解的方式解释它.
使用random和arc4random生成随机数有什么区别?
Con*_*nor 91
arc4random返回0到(2 ^ 32)-1 arc4random_uniform之间的整数,同时返回0到你传递的上限之间的整数.
来自man 3 arc4random:
arc4random_uniform()将返回小于upper_bound的均匀分布的随机数.arc4random_uniform()建议使用像``arc4random()%upper_bound''这样的结构,因为当上限不是2的幂时,它避免了"模偏差".
例如,如果你想要一个0到4之间的整数,你可以使用
arc4random() % 5
Run Code Online (Sandbox Code Playgroud)
要么
arc4random_uniform(5)
Run Code Online (Sandbox Code Playgroud)
在这种情况下使用模数运算符会引入模偏差,因此最好使用arc4random_uniform.
要理解模偏差,假设arc4random范围小得多.而不是0到(2 ^ 32)-1,它是0到(2 ^ 4)-1.如果你对该范围内的每个数字执行%5,那么你将获得0次4次,每次获得1,2,3和4次,使得0更有可能发生.当范围大得多时,这种差异变得不那么显着,但是避免使用模数仍然更好.
| 归档时间: |
|
| 查看次数: |
35928 次 |
| 最近记录: |