随机函数生成器C++

Random function generator C++

本文关键字:C++ 函数 随机      更新时间:2023-10-16

我想根据已知的分布在C++中生成一个随机数。

这就是问题所在。我掷骰子(说)6次,我记录了3次四,1次,2次。所以四=3/6,一=1/6,二=2/6

是否有我可以使用的库函数来根据上述分布生成随机数?


如果不是,你认为我简单地做是有效的吗

int i= ran()%5;
if (i is in the range of 0 to 2)
{
  //PICK FOUR
}
else if (i is in the range of 3 to 4)
{
  // PICK ONE
}
else 
{
   // PICK TWO
}
 int pick()
 {
   static const int val[6] = { 4,4,4,1,2,2 };
   return val[ran()%6]; // <---- note %6 not %5
 }

编辑注释 ran() % 6 可能会也可能不会均匀分布,即使ran()均匀分布。您可能想要保证均匀分布的东西,例如

std::random_device device;
std::default_random_engine engine(device());
std::uniform_int_distribution<int> dist(0, 5);

现在dist(engine)ran()%6的良好替代品。

Edit2 根据评论中的建议,这是一个基于std::discrete_distribution的版本:

std::random_device device;
std::default_random_engine engine(device());
std::discrete_distribution<> dist ({1, 2, 0, 3, 0, 0});
int pick()
{
   return dist(engine) + 1;
}