我有一个程序需要生成很多 0/1 随机值。因为这需要很多次并且在代码的不同部分中,我希望有一个时间高效且易于使用的随机生成器来执行此任务。
我开始使用<random>
C++11 的标准库来执行此操作,但文档非常稀少,有时甚至是矛盾的。
我的问题如下:
我应该自己提取位(在 unsigned long long 上使用掩码)还是图书馆可以自己提取?
确实,我找到了一份文件,上面写着:
更好的是,符合标准的发行版可以处理所有引擎极端情况,甚至是不太可能的情况。例如,如果引擎每次调用提供的位数少于所需的位数,则分发将进行多次调用,直到它有足够的位数来满足整个所需的变量范围。另一方面,如果一个引擎产生的比特比需要的多,一个发行版可以自由地缓存多余的比特,以备下次调用时使用。
- 这是否意味着它会自动只使用一位来生成 0 和 1?
- 如果是,我应该使用概率为 0.5的
uniform_int_distribution
或(bool) 分布吗?bernoulli_distributio
(什么是最节省时间的?) - 如果不是,使用随机库生成大量优质随机位的最省时方法是什么?哪个分布有哪些参数?所有的比特都是随机的还是有一些偏差?
- 如果是,我应该使用概率为 0.5的