Ce face std::bernoulli_distribution
std::bernoulli_distribution(p) returnează bool: true cu probabilitatea p (între 0 și 1), false cu probabilitatea 1 - p. Fără argument, p este 0.5, ca o monedă corectă.
Este mai clar decât uniform_real_distribution(0, 1)(gen) < p și spune direct intenția: un eveniment care are loc cu o anumită șansă.
Parametri
| Parametru | Descriere |
|---|---|
p |
Probabilitatea lui true, între 0 și 1. |
generator |
La apel: un generator. |
Ce returnează
La fiecare apel, true sau false.
Exemple
Exemplul 1: Aruncarea unei monede
#include <print>
#include <random>
int main() {
std::mt19937 gen(std::random_device{}());
std::bernoulli_distribution moneda;
for (int i = 0; i < 5; ++i) {
std::print("{} ", moneda(gen) ? "Cap" : "Ban");
}
std::println("");
}
Rezultat posibil (diferă la fiecare rulare)
Cap Ban Ban Cap Cap
Exemplul 2: Șansă de 30% de ploaie
Pe 1000 de zile simulate, aproximativ 300 sunt ploioase. Generatorul std::mt19937 cu seed fix produce aceleași numere pe orice compilator, dar modul în care o distribuție le transformă nu este fixat de standard. Rezultatul de mai jos este cel dat de libc++ (Clang); cu GCC sau MSVC, același seed poate da alte valori.
#include <print>
#include <random>
int main() {
std::mt19937 gen(99);
std::bernoulli_distribution ploua(0.3);
int zile_ploioase = 0;
for (int zi = 0; zi < 1000; ++zi) {
if (ploua(gen)) {
++zile_ploioase;
}
}
std::println("Zile ploioase: {} din 1000", zile_ploioase);
std::println("Probabilitatea setată: {}", ploua.p());
}
Rezultat
Zile ploioase: 309 din 1000
Probabilitatea setată: 0.3
Greșeli frecvente
- Dai probabilitatea în procente (
bernoulli_distribution(30)): valoarea trebuie să fie între 0 și 1 (0.3).
Comenzi înrudite
std::uniform_real_distribution: Produce numere cu virgulă aleatorii, distribuite uniform în intervalul [a, b).std::discrete_distribution: Alege aleatoriu un index 0, 1, 2… cu probabilități proporționale cu ponderile date.std::mt19937: Generatorul Mersenne Twister: numere pseudo-aleatorii rapide și de calitate, reproductibile cu un seed fix.