我正在使用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/

10-13 07:41