C:关于兰特,随机和arc4random的最终真相

前端之家收集整理的这篇文章主要介绍了C:关于兰特,随机和arc4random的最终真相前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个主题有很多矛盾的信息.所以让我们尝试就一个确定的答案达成一致:

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

注意:只是为了使问题清楚,这不是真正的随机性的问题,只是这3个之间的冲突.

正如所指出的,这个问题没有什么意义,因为这不是关于C,而是关于一个具体的实现,在我的情况下,可可(更具体地说是iphone sdk,但是我的猜测是他们是一样的功能去).不过,这里有一些有用的信息.我最后通过实施arc4random,主要是因为它的易用性(不需要播种),这是没有人指出的重要因素.

我正在关闭这个问题,并为可可开发商添加可可标签,寻找有关RN​​G的信息.非常感谢那些贡献的人,并为此感到困惑.

解决方法

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

对于兰特,C标准对发电机的质量没有任何意义,即返回总是相同的数字将符合.它表示数字必须在0和RAND_MAX之间. RAND_MAX的值和正在使用的精确算法是实现定义的(尽管RAND_MAX必须至少为32767).

对于随机的POSIX specifies,默认情况下它必须具有至少2 ^ 31的周期,并且如果initstate被调用256字节的状态,则它必须具有至少2 ^ 69的周期;其他细节再次被实现定义.

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

要详细比较它们,必须知道您所参考的具体实现.

猜你在找的C&C++相关文章