可能重复:
C++ function for picking from a list where each element has a distinct probability
我需要根据我可以定义的概率(.25,.50,。75)随机确定是或否结果(硬币翻转的种类)。
因此,例如,我想随机确定是或否,其中有75%的机会被选中。我有什么选择?我可以使用C ++库吗?
答案 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_device
或boost::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
。