C rand()缺乏随机性

Ben*_*ler 8 c random

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

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

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

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

jxh*_*jxh 12

而不是使用rand()%2,试试rand()>(RAND_MAX/2).你只能假设rand()在这段时间内是统一的[0, RAND_MAX].

编辑:这是Shahbaz在评论中提出的,我在发布此答案后才注意到这一点.

编辑: ArjunShankar用我之前的措辞打电话给我:"rand()仅在区间[0,RAND_MAX]上指定为统一的"

从C99标准:

rand函数计算0到RAND_MAX范围内的伪随机整数序列.

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