I have a program that needs to generate very many 0/1 random values. Because this is needed many times and in different part of the code, I wish to have an efficient and easy to use random generator to perform this task.
I started using the standard library <random>
from C++11 to do so but the documentation is quite sparse and sometimes even contradictory.
My questions were the following:
-
Should I extract bits myself (using masking on unsigned long long) or can the library do it on its own?
Indeed, I found a document that says:
Better still, standard-conforming distributions cope with all engine corner cases, even unlikely ones. For example, if an engine delivers fewer bits per call than needed, the distribution will make multiple calls until it has enough bits to let it satisfy the entire desired range of variates. On the other hand, if an engine produces more bits than needed, a distribution is free to cache the excess for use the next time it is called.
- Does this mean that it will automatically use only two bits to generate 0 and 1?
- If yes, should I use the
uniform_int_distribution
or thebernoulli_distributio
(bool) distribution with probability 0.5? (What would be most efficient?) - If no, what is the most efficient way to generate a lot of random bits with the random library?
- If yes, should I use the
Aucun commentaire:
Enregistrer un commentaire