Случайные числа с разными вероятностями

Возможный дубликат:
C ++ функция для выбора из списка, где каждый элемент имеет определенную вероятность

Мне нужно случайным образом определить результат «да» или «нет» (вид броска монеты) на основе вероятности, которую я могу определить (.25, .50, .75).

Так, например, я хочу случайным образом определить, да или нет, где да имеет 75% шанс быть выбранным. Какие у меня есть варианты для этого? Есть ли библиотека C ++, которую я могу использовать для этого?

5

Решение

Вы можете легко реализовать это, используя rand функция:

bool TrueFalse = (rand() % 100) < 75;

rand() % 100 даст вам случайное число от 0 до 100, и вероятность того, что оно будет меньше 75, составляет 75%. Вы можете заменить 75 для любой вероятности, которую вы хотите.

15

Другие решения

Проверьте в библиотеке C ++ 11 псевдослучайных чисел.

http://en.cppreference.com/w/cpp/numeric/random

http://en.wikipedia.org/wiki/C%2B%2B11#Extensible_random_number_facility

std::random_device rd;
std::uniform_int_distribution<int> distribution(1, 100);
std::mt19937 engine(rd()); // Mersenne twister MT19937

int value=distribution(engine);
if(value > threshold) ...

как это, то скажите, что все выше 75 это правда, а все ниже ложно, или любой другой порог, который вы хотите

В отличие от rand на самом деле вы можете управлять свойствами генерации чисел, также я не верю, что rand, используемый в других ответах (по модулю), даже представляет равномерное распределение, что плохо.

6

std::random_device или же boost::random если std::random_device не реализован вашим компилятором C ++, используя boost::random ты можешь использовать bernoulli_distribution генерировать случайный bool значение!

3

Поскольку здесь никто, кажется, не слушает, я сам напишу правильный ответ.

std::mt19937 e(std::random_device());
std::bernoulli_distribution d(0.75);

if (d(e))
// ...

Отредактировано из-за хорошего комментария.

3
#include <cstdlib>
#include <iostream>
using namespace std;

bool yesOrNo(float probabilityOfYes) {
return rand()%100 < (probabilityOfYes * 100);
}

int main() {
srand((unsigned)time(0));
cout<<yesOrNo(0.897);
}

если ты позвонишь yesOrNo(0.75) это вернется true 75% времени

1
По вопросам рекламы [email protected]