受General purpose random number generation的启发我决定执行我自己的测试以查看rand()出了什么问题。使用这个程序:兰特()真的很糟糕吗?
srand(time(0));
for (int i = 0; i < 1000000; ++i)
{
std::cout << rand() % 1000 << " ";
}
我使用的命令加载它在八度:
S = load("test.txt")
hist(S)
,得到了这样的结果:
对我来说,结果似乎是相当制服。我预计结果会更加倾斜。我做错了吗?
兰特主要是不好的,因为:'是实现定义RAND_MAX',以及例如在视觉工作室它仅仅是2^16; rand是全局的,这意味着如果别人以外的其他人调用srand,它可能会搞砸你的代码。如果您有C++ 11编译器,请考虑使用其中一个RNG – Creris 2014-10-18 13:32:35
根据具体实现,rand()可以在其低位具有较低的熵。如果你做了'rand()%4',在一些实现中这是非常不一致的。这就是为什么在这种情况下通常推荐使用(如果使用'rand()')写入'rand()/(RAND_MAX/4)'的原因。 – leemes 2014-10-18 13:33:38
* rand()真的很糟吗?* YES! – 2014-10-18 13:39:13