arc4random()的最大返回值

时间:2016-03-02 21:36:45

标签: ios arc4random

出于某种原因,我无法找到任何官方文档,告诉我arc4random()的范围是什么。我在一些非权威的消息来源中看到它是2 ^ 32 - 1,略高于40亿。

任何人都可以证实吗?如果是这样,你能链接到某个地方显示这个号码的官方文件吗?我正在尝试在我的iOS应用程序上生成一个随机数,并且需要有一个相当正式的高端才能使算法正常工作。

2 个答案:

答案 0 :(得分:3)

man page for arc4random说:

  

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()   函数系列,因为它们自动自动化   初始化自己。

来源https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/arc4random.3.html