可能的重复:
用于从每个元素具有不同概率的列表中选择的 C++ 函数
我需要根据我可以定义的概率(0.25、0.50、0.75)随机确定是或否结果(抛硬币的类型)。
因此,例如,我想随机确定是或否,其中是有 75% 的机会被选中。我有什么选择?有没有我可以使用的 C++ 库?
可能的重复:
用于从每个元素具有不同概率的列表中选择的 C++ 函数
我需要根据我可以定义的概率(0.25、0.50、0.75)随机确定是或否结果(抛硬币的类型)。
因此,例如,我想随机确定是或否,其中是有 75% 的机会被选中。我有什么选择?有没有我可以使用的 C++ 库?
您可以使用以下功能轻松实现此rand
功能:
bool TrueFalse = (rand() % 100) < 75;
rand() % 100
会给你一个 0 到 100 之间的随机数,它低于 75 的概率是 75% 。您可以将 替换75
为您想要的任何概率。
检查 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 在其他答案中使用(使用模数)甚至呈现均匀分布,这很糟糕。
std::random_device
或者boost::random
如果std::random_device
不是由您的 C++ 编译器实现,boost::random
则可以使用abernoulli_distribution
来生成随机bool
值!
#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% 的时间。