受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