C++ 在C++;,如何根据双值概率生成随机数?

C++ 在C++;,如何根据双值概率生成随机数?,c++,probability,C++,Probability,我有一个事件应该有0.5%的发生概率(不是经常发生) 如何根据这个概率生成一个随机数 这样就足够了吗,我不相信,因为srand返回一个整数 double rate = 0.05; if((srand() % 100) < rate) { std::cout << "Event Occurred" << endl; } double rate=0.05; 如果((srand()%100)

我有一个事件应该有0.5%的发生概率(不是经常发生)

如何根据这个概率生成一个随机数

这样就足够了吗,我不相信,因为srand返回一个整数

double rate = 0.05;
if((srand() % 100) < rate)
{
    std::cout << "Event Occurred" << endl;
}
double rate=0.05;
如果((srand()%100)<速率)
{

std::cout
srand
不会生成随机数;
rand
会生成随机数。@MatthewMoss的dup的可能重复项是正确的,但要补充一点,诀窍是记住0.05%的概率等于5/10000的概率。换句话说,你只需要适当地调整你的值,使所有的值都是integer。dup中的答案很糟糕。从C++11开始,您通常希望使用类似于
uniform_int_distribution
的方法将数字放入一个范围。如果您的编译器足够老,它不包括这个范围,那么至少可以告诉您如何正确地完成该部分。
srand
不会生成随机数;
randdoes.@MatthewMoss的dup的可能重复项是正确的,但想补充一点,诀窍是记住0.05%的概率等于5/10000的概率。换句话说,你只需要适当地调整你的值,使所有值都是整数。dup中的答案很糟糕。从C++11开始,你通常需要使用类似于
uniform\u int\u distribution
的方法将数字放入一个范围。如果您的编译器足够老,它不包含这个范围,那么至少可以告诉您如何正确执行该部分。
std::mt19937 rng(std::random_device{}());
std::bernoulli_distribution d(0.005);
bool b = d(rng); // true 0.5% of the time; otherwise false