C:关于 rand、random 和 arc4random 的最终真相

标签 c cocoa random

<分区>

关于这个主题有很多相互矛盾的信息。因此,让我们尝试就一个明确的答案达成一致:

C 中的这些随机数生成器中哪一个产生更好的随机性:rand、random 或 arc4random?

注意:为了让问题更清楚,这不是关于真正随机性的问题,这只是这三者之间的冲突。


正如所指出的,这个问题没有多大意义,因为这不是关于 C,而是关于一个特定的实现,在我的例子中是 cocoa(更具体地说是 iphone sdk,但我的猜测是它们与就这些功能而言)。尽管如此,这里还是有一些有用的信息。我最后实现了 arc4random,主要是因为它易于使用(不需要播种),这是一个没有人指出的重要因素。

我正在关闭这个问题,并为寻找有关 RNG 的信息的 cocoa 开发人员添加 cocoa 标签。非常感谢那些做出贡献的人,对于造成的困惑,我们深表歉意。

最佳答案

在这些函数中,只有 rand 是标准 C 的一部分。random 是 POSIX 的一部分,而 arc4random 仅在 BSD(和派生的)中提供。所以只有 rand 是“在 C 中”。

对于 rand,C 标准没有说明生成器的质量,即始终返回相同的数字将符合要求。它表示该数字必须介于 0 和 RAND_MAX 之间。 RAND_MAX 的值和所使用的精确算法是实现定义的(尽管 RAND_MAX 必须至少为 32767)。

对于随机,POSIX specifies默认情况下它必须有至少 2^31 的周期,并且如果使用 256 字节的状态调用 initstate,那么它必须有至少 2^69 的周期;其他细节同样由实现定义。

对于arc4random,具体实现是其定义(RC4)的一部分。指定它给出 2^32 个不同的值;我找不到任何关于它的信息 期间。

要详细比较它们,必须知道您指的是什么具体实现。

关于C:关于 rand、random 和 arc4random 的最终真相,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/328950/

相关文章:

r 生成带有随机 1 和 0 且有限制的列

c - 我需要帮助找出这个算法的作用

c - 我正在尝试向每个新行添加数字

iphone - 如何在我的 iPhone 应用程序和 Mac/PC 之间共享文件

c - 听(): invalid argument

objective-c - 如何确定 Objective C 中的数组索引?

macos - NSImage 与 NSBitmapImageRep : massive memory usage differences?

ruby - 在 Ruby 中生成不等于其他数字的数字?

c - 判断open()函数打开的是文件还是目录?

c - Strchr 删除我想要的部分