gpt4 book ai didi

c - 生成随机位 - C rand() 中缺乏随机性

转载 作者:太空狗 更新时间:2023-10-29 17:00:26 25 4
gpt4 key购买 nike

我正在使用 rand() 生成 0 或 1 (rand() % 2)。我正在使用当前时间 (srand(time(NULL))) 为它播种。

经过多次调试,我意识到 rand() 永远不会连续返回偶数(奇数)16 次或更多次。

这是一个已知问题吗?有没有更好的C自带的PRNG?

我使用 Visual Studio 2010 在 Windows 7 上运行。

最佳答案

尝试使用 rand()>(RAND_MAX/2),而不是使用 rand()%2。您只能假设 rand() 在区间 [0, RAND_MAX] 上是统一的。

编辑:这是 Shahbaz 在评论中建议的,我是在发布此答案后才注意到的。

编辑:ArjunShankar 反对我之前的措辞:“rand() 仅指定为在区间 [0, RAND_MAX] 上保持一致”

来自 C99 标准:

The rand function computes a sequence of pseudo-random integers in the range 0 to RAND_MAX.

从技术上讲,未指定均匀性(或等分布),但它是用于实现常用 PRNG(例如 Mersenne Twister)的实际标准。这是为了允许程序员轻松创建具有非均匀分布的自定义 PRNG。如果没有此属性,程序员将被迫从头开始实现自定义 PRNG。

关于c - 生成随机位 - C rand() 中缺乏随机性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11418113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com