swift - Arc4random 上较大的数量限制是否会降低加载速度?

标签 swift arc4random

您好,我是这里的编程新手,我很好奇较大的限制数生成器是否会导致生成随机数时速度变慢?例如:

哪个生成随机数更快?

arc4random_uniform(1000000)

arc4random_uniform(10)

速度可以一样吗?

谢谢!

最佳答案

假设您正在谈论 arc4random_uniform 而不是 arc4random,因为后者没有您可以指定的上限。

答案是:可能!


查看source and documentation :

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/

相关文章:

swift - 如何将使用 "\u{ea12}"创建的 Swift 字符串转换回其十六进制值/字符串 "ea12"?

swift - 如何总共有 10 个字符并确保至少随机使用 4 个不同集合中的一个字符

arrays - 如何以随机顺序打印这本字典中的所有数字而不重复它们

ios - 在 iOS 中播种 arc4random()

swift - 第一次无法使用 Firebase 观察监听器获取数据库项

ios - Swift bool 自己改变

ios - 由于未捕获的异常而终止应用程序 Swift

swift - 尝试从字符串中检索随机字母时出现段错误

c# - C#中的这个RC4加密代码有什么问题吗

iOS:在扩展中从 NSNotificationCenter 返回值(swift)