我正在使用rand()
生成0或1(rand() % 2
)。我正在使用当前时间(srand(time(NULL))
)进行播种。
经过大量调试后,我意识到rand()
绝不会连续16次或多次返回偶数(奇数)。
这是一个已知的问题? C随附更好的PRNG吗?
我正在使用Visual Studio 2010在Windows 7上运行。
最佳答案
尝试使用rand()%2
而不是rand()>(RAND_MAX/2)
。您只能假定rand()
在[0, RAND_MAX]
间隔上是统一的。
编辑:这是Shahbaz在评论中建议的,我只有在发布此答案后才注意到。
编辑: ArjunShankar用我以前的措辞叫我:“仅在间隔[0,RAND_MAX]上将rand()指定为一致”
根据C99标准:
从技术上讲,没有规定均匀性(或均匀分布),而是用于实现常用PRNG(例如Mersenne Twister)的实际标准。这是为了允许程序员轻松创建具有非均匀分布的自定义PRNG。没有此属性,程序员将不得不从头开始实现自定义PRNG。
关于c - 生成随机位-C rand()中缺乏随机性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11418113/