受General purpose random number generation的启发,我决定执行自己的测试以查看rand()出了什么问题。使用此程序:
srand(time(0));
for (int i = 0; i < 1000000; ++i)
{
std::cout << rand() % 1000 << " ";
}
我使用以下命令将其加载到Octave中:
S = load("test.txt")
hist(S)
并得到以下结果:
对我来说,结果似乎很统一。我希望结果会更偏斜。我的考试做错了吗?
最佳答案
您问题中的测试并未真正测试随机性。它所做的只是确保数字均匀分布。这是一个必要条件,但不是充分条件:还有许多其他方式可能会使随机数生成器不足。
例如,如果我为您提供了一个循环返回数字0、1、2,...,999的函数,则该函数也将通过您的测试。然而,它显然将无法对随机性做出任何合理的定义。
要了解如何在实践中测试随机数生成器,请看一下
有关
rand()
的专门讨论,请查看 rand()
Considered Harmful。