2015-05-08 2 views
0

Что такое самый простой способ получить распределенную случайную переменную Bernoulli в C++? I У меня есть не константа p. p начинается с 0, получая p+=0.01, до p=1. («для» петли) У меня есть эта идея:Случайные переменные Bernoulli в C++

объявить int aray размером 100, интеризованный нулями. evrey время p получает +0.01, я меняю один ноль на «1» ... и получаю случайное число% 100.

Это хорошо? благодаря

+1

Используя один из уже существующих [распределений Бернулли] (http://en.cppreference.com/w/cpp/numeric/random#Bernoulli_distributions)? –

+4

Вы попробовали ['std :: bernoulli_distribution'] (http://en.cppreference.com/w/cpp/numeric/random/bernoulli_distribution)? –

+0

спасибо! Я не знал, что он существует! – Atheel

ответ

2

Вы должны использовать современные C++ (C++ 11 или более поздней версии, если это возможно). Вы можете сделать это:

#include <random> 
#include <iostream> 

int main() 
{ 
    std::random_device rd{}; // use to seed the rng 
    std::mt19937 rng{rd()}; // rng 

    double p = 0.2; // probability 
    std::bernoulli_distribution d(p); 

    // generate 5 runs 
    for(std::size_t i = 0; i < 5; ++i) 
     std::cout << d(rng) << " "; 
} 
1

вы можете получить случайное число в диапазоне от 0 до 1, и вычислить Бернулли случайное число из него

double p = 0.5; 
double r = ((double) rand()/(RAND_MAX)); 
unsigned int br = 0; 
if (r >= p) 
    br = 1;