使用C ++ 11随机库进行Unbiase硬币投掷

时间:2015-11-02 14:54:39

标签: c++11 random coin-flipping

我有一个需要生成很多0/1随机值的程序。因为这需要多次并且在代码的不同部分,我希望有一个时间高效且易于使用的随机生成器来执行此任务。

我开始使用C ++ 11中的标准库<random>这样做,但文档很稀疏,有时甚至是矛盾的。

我的问题如下:

  • 我应该自己提取位(使用无符号long long上的掩码)还是库可以独立完成?

    确实,我发现document表示:

  

更好的是,符合标准的发行版应对所有引擎   角落案件,甚至不太可能。例如,如果发动机交付   每个呼叫的比特数少于所需的数量,分配将产生多个比特   调用,直到它有足够的位来让它满足整个所需的   变异范围。另一方面,如果引擎产生更多位   比需要的,分发可以自由缓存多余的使用   下次它被召唤。

  • 这是否意味着它只会自动使用一位 生成0和1?
    • 如果是,我应该使用概率为0.5的uniform_int_distributionbernoulli_distributio(bool)分布吗? (什么是最有效率的?)
    • 如果不是,使用随机库生成大量优质随机位的最有效时间是什么?哪个分配哪个参数?所有的位都是随机的还是有点偏差?

0 个答案:

没有答案