rand()即使在我的Mac上播种也会给出连续数字

时间:2015-04-10 16:44:47

标签: c++ macos random

这刚刚开始发生。我注意到我的一个程序没有给出随机数,所以我做了一个简单的随机数字程序来测试它:

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
  srand(time(NULL))
  std::cout << rand() << std::endl;
  return 0;
}

即使播种时,它也会保持相同的随机数,每次调用后只会增加一点。这是运行程序几次之后的一些数字: 874692194,874709001,874725808,874742615。

我把这个程序放在我的一台Linux机器上是为了确保,并且正如预期的那样,它正确地产生了随机数。

那么为什么我的Mac不会产生随机数?我已经尝试重新启动计算机,问题仍然存在。

在有人说&#34;为什么不使用C ++的随机库?&#34;之后,我们不允许在此计算类中使用C ++ 11功能,以便& #39;不是解决方案。

1 个答案:

答案 0 :(得分:1)

像rand()这样的简单PRNG旨在生成一系列数字,当作为序列分析时,它们是随机均匀分布的。

如果你只是在播种后从PRNG中产生一个数字,那么第一个数字实际上只是种子的散列,并且许多PRNG具有非常糟糕的种子散列函数。

你可以通过制作一个时间的MD5哈希加上进程ID(以及你可能已经存在的其他一些熵)来改进种子。但是,你可以将它作为你的单个随机数使用,并且根本不需要PRNG。