毕设2 关于随机数

今天长见识了,我一直以为想要取0~N-1之间均匀分布的随机数,用rand()%N就可以了。(N不超过RAND_MAX)

事实是在N不大的时候,基本上是均匀分布,但是并不确切。因为rand()产生0-RANDMAX之间的整数,但是RAND_MAX通常不是N的倍数。导致求余数的时候,有些数的概率高那么一点点。

当然当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<int> distribution(1,6);

    for(int i=0;i<100;++i)
    {
        std::cout<<distribution(generator);
    }


我也尝试过用boost库中的随机数,但是有意思的是boost库中的uniform_int_distribution看起来不是那么的uniform,我google了一下也还有其他人这么说

下面是boost库中随机1-6的100个数:

5166166242142246666615666135521131645664451362655355533342225512261116555125631431325151233333455655

中间出现连续5个6,连续5个3,都让它显得不那么的随机。所以还是用了标准库里的。
原文链接: https://www.cnblogs.com/zhangzheng/archive/2013/02/10/2909805.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/77835

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午6:14
下一篇 2023年2月9日 下午6:15

相关推荐