事實是在N不大的時候,基本上是均勻分布,但是并不確切。因為rand()產(chǎn)生0-RANDMAX之間的整數(shù),但是RAND_MAX通常不是N的倍數(shù)。導致求余數(shù)的時候,有些數(shù)的概率高那么一點點。
創(chuàng)新互聯(lián)是專業(yè)的霞浦網(wǎng)站建設公司,霞浦接單;提供成都網(wǎng)站制作、做網(wǎng)站,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行霞浦網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!當然當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,都讓它顯得不那么的隨機。所以還是用了標準庫里的。