出于某种原因,我无法找到任何官方文档,告诉我arc4random()
的范围是什么。我在一些非权威的消息来源中看到它是2 ^ 32 - 1,略高于40亿。
任何人都可以证实吗?如果是这样,你能链接到某个地方显示这个号码的官方文件吗?我正在尝试在我的iOS应用程序上生成一个随机数,并且需要有一个相当正式的高端才能使算法正常工作。
答案 0 :(得分:3)
arc4random()
函数返回0到2之间的伪随机数 32 - 1 ...
而且,幸运的是,这匹配了uint32_t
的返回类型。也就是说,arc4random
可以返回任何 32位无符号整数。包含上限为UINT32_MAX
(或Swift中的UInt32.max
)。
但是,如果您只需要在特定范围内均匀分布的数字,则应使用 arc4random_uniform(n)
(范围是独占的:arc4random_uniform(5)
可以返回0,1,2,3或4)。这更正确 - 更方便! - 而不是使用%
截断常规arc4random()
返回的范围。
答案 1 :(得分:0)
你是对的,
说明
The arc4random() function uses the key stream generator employed by the arc4 cipher, which uses 8*8 8 bit S-Boxes. The S-Boxes can be in about (2**1700) states. The arc4random() function returns pseudo-random pseudorandom random numbers in the range of 0 to (2**32)-1, and therefore has twice the range of rand(3) and random(3).
arc4random_buf()函数填充长度为nbytes的区域buf ARC4衍生的随机数据。
arc4random_uniform()将返回均匀分布的随机数 数字小于upper_bound。建议使用arc4random_uniform() 结构如``arc4random()%upper_bound''因为它避免了 "模偏差"当上限不是2的幂时。
arc4random_stir()函数从/ dev / urandom读取数据并使用 它通过arc4random_addrandom()来置换S-Box。
在使用arc4random()之前无需调用arc4random_stir() 函数系列,因为它们自动自动化 初始化自己。