具有不同概率的随机数

时间:2012-10-14 18:46:35

标签: c++ random probability

  

可能重复:
  C++ function for picking from a list where each element has a distinct probability

我需要根据我可以定义的概率(.25,.50,。75)随机确定是或否结果(硬币翻转的种类)。

因此,例如,我想随机确定是或否,其中有75%的机会被选中。我有什么选择?我可以使用C ++库吗?

4 个答案:

答案 0 :(得分:16)

您可以使用rand函数轻松实现此功能:

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

rand() % 100会给你一个0到100之间的随机数,而它低于75的概率就是75%。您可以将75替换为您想要的任何概率。

答案 1 :(得分:6)

检查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(使用modulo)甚至呈现均匀分布,这很糟糕。

答案 2 :(得分:3)

std::random_deviceboost::random如果您的C ++编译器未实现std::random_device,使用boost::random您可以使用bernoulli_distribution生成随机{{1}值!

答案 3 :(得分:1)

#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),它将在75%的时间内返回true