我在用rand()
生成 0 或 1 (rand() % 2
)。我正在使用当前时间(srand(time(NULL))
).
经过多次调试,我意识到rand()
永远不会连续返回 16 次或更多次偶数(奇数)。
这是一个已知的问题? C 附带有更好的 PRNG 吗?
我使用 Visual Studio 2010 在 Windows 7 上运行。
而不是使用rand()%2
, try rand()>(RAND_MAX/2)
。你只能假设rand()
区间上要均匀[0, RAND_MAX]
.
Edit:这是 Shahbaz 在评论中建议的,我是在发布这个答案后才注意到的。
Edit:ArjunShankar 批评了我之前的措辞:“rand() 仅指定为在区间 [0, RAND_MAX] 上一致”
来自C99标准:
rand 函数计算 0 到 0 范围内的伪随机整数序列
兰德_最大值。
从技术上讲,均匀性(或均匀分布的)未指定,但它是用于实现常用 PRNG(例如 Mersenne Twister)的事实上的标准。这是为了允许程序员轻松创建具有非均匀分布的自定义 PRNG。如果没有这个属性,程序员就被迫从头开始实现自定义 PRNG。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)