我看到关于Objective-C中random
和arc4random
之间差异的旧帖子,也在网上看到了答案,但我没能真正理解,所以希望这里有人能用更易懂的方式来解释一下。
使用arc4random
和arc4random_uniform
生成随机数的区别是什么?
我看到关于Objective-C中random
和arc4random
之间差异的旧帖子,也在网上看到了答案,但我没能真正理解,所以希望这里有人能用更易懂的方式来解释一下。
使用arc4random
和arc4random_uniform
生成随机数的区别是什么?
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
或者arc4random_uniform(5)
在这种情况下使用模数运算符会引入模数偏差,因此最好使用arc4random_uniform。
为了理解模数偏差,请假设arc4random
的范围要小得多。它不是0到(2^32)-1,而是0到(2^4)-1。如果对该范围内的每个数字执行% 5,则会出现4次0,以及3次1、2、3和4,从而使0更有可能出现。当范围大得多时,这种差异变得不那么显着,但最好避免使用模数。