【发布时间】:2016-12-04 14:34:39
【问题描述】:
我正在尝试使用以下方法实现生成随机二进制数的功能:
srand(time(NULL));
int S = rand() % 2;//continuous random variable between 0 and 1
然后:
rand()%2;
被连续调用 2^20 次... 但是我没有得到正确的随机数..有什么改进建议吗?
是否有二进制数或 eqv. 的数据类型? (而不是声明一个整数)
另外,我见过的 srand 种子的唯一实现是 time(NULL) OR time(0) ,有没有办法操纵种子以获得更好的随机数?
【问题讨论】:
-
您可能想在您的问题中添加标签“c++”或“c”,因为我认为这就是您的代码所在。
-
你认为什么是“适当的随机数”?你得到了什么样的结果?
-
使用
rand()%2;只挑选您刚刚生成的随机数的低位。一些 PRNG 会在其低位生成模式,这可能是导致您的问题的原因。最好使用if (rand() % 10000 >= 5000) ...之类的东西来避免这个问题,它会使用更多位的 PRNG 输出。 -
你每次都打
srand()吗?如果是这样,那是一个很大的禁忌。 -
您问“......有没有办法操纵种子以获得更好的随机数?”所有纯算法 PRNG 循环,即它们最终返回到它们之前所处的状态,并且从那时起产生相同的值序列。种子值所做的只是选择循环的入口点。所以不,操纵种子会给你一个不同的循环子序列,但与随机数的质量无关。