事實是在N不大的時候,基本上是均勻分布,但是并不確切。因為rand()產(chǎn)生0-RANDMAX之間的整數(shù),但是RAND_MAX通常不是N的倍數(shù)。導致求余數(shù)的時候,有些數(shù)的概率高那么一點點。
當然當N小的時候,因為RAND_MAX很大(通常是0x7FFF),這個概率的差別很小。比如N=10時,會導致0~7的概率比8~9的概率高0.0000305。
所以當N較大,或者N超過RAND_MAX時,就不能用這個方法啦。在C++的random庫里有uniform_int_distribution
std::default_random_engine generator;
std::uniform_int_distribution distribution(1,6);
for(int i=0;i<100;++i)
{
std::cout<
我也嘗試過用boost庫中的隨機數(shù),但是有意思的是boost庫中的uniform_int_distribution看起來不是那么的uniform,我google了一下也還有其他人這么說
下面是boost庫中隨機1-6的100個數(shù):
5166166242142246666615666135521131645664451362655355533342225512261116555125631431325151233333455655
中間出現(xiàn)連續(xù)5個6,連續(xù)5個3,都讓它顯得不那么的隨機。所以還是用了標準庫里的。