您好,我是这里的编程新手,我很好奇较大的限制数生成器是否会导致生成随机数时速度变慢?例如:
哪个生成随机数更快?
arc4random_uniform(1000000)
或
arc4random_uniform(10)
速度可以一样吗?
谢谢!
最佳答案
假设您正在谈论 arc4random_uniform
而不是 arc4random
,因为后者没有您可以指定的上限。
答案是:可能!
Uniformity is achieved by generating new random numbers until the one returned is outside the range
[0, 2**32 % upper_bound)
. This guarantees the selected random number will be inside[2**32 % upper_bound, 2**32)
which maps back to [0, upper_bound) after reduction modulo upper_bound.
这意味着随机数生成的速度取决于arc4random
的上限与上述模余数之间的比率。
在您的示例中:
2^32 % 10 = 4
2^32 % 1000000 = 967.296
使用arc4random()
创建一次随机数会产生例如768.649
,它小于第二个值。这意味着它必须为后一种情况第二次调用 arc4random() 创建第二个随机数 - 第一种情况已经完成创建随机数。
但是运行时的差异完全取决于机会。
第二个程序运行可能在第一次尝试时产生1.316.166.055
,这会导致两个调用花费相同的时间。
由于 arc4random
是均匀分布的,因此第二个花费更长时间的概率有点接近 967.296/2^32
,即 0.00022521615
= > 在 ~0.02%
的调用中,第二个调用比第一个调用花费的时间更长。
在这个计算中,我忽略了这样一个事实:理论上,arc4random
甚至可以产生一个小于 4
的数字,这甚至会触发第一次调用 requery)。但它仍然应该让您了解差异的可能性有多大。
如果您想获得可能“最慢”的调用,则必须执行 arc4random_uniform(2^31+1)
,它在第一次调用 时有大约 50% 的机会失败>arc4random
。
关于swift - Arc4random 上较大的数量限制是否会降低加载速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37206091/