1

我有一些函数可以生成双精度、浮点、短、长随机值。我有另一个函数,我将数据类型传递给它,它应该返回一个随机值。现在我需要在该函数中根据传递的数据类型选择返回值。例如,如果我通过浮点数,我需要:

回报为浮动的概率为 70%,回报为双倍、空头或多头的概率各为 10%。我可以调用另一个函数来生成相应的随机值,但是我如何适应最终返回的概率权重?我的代码是 C++。

一些指针表示赞赏。

谢谢。

4

4 回答 4

5

C++ 随机数具有均匀分布。如果您需要另一个分布的随机变量,则需要将其数学公式建立在均匀分布的基础上。

如果您没有随机变量的数学公式,您可以执行以下操作:

int x = rand() % 10;
if (x < 7)
{
 // return float
}
else (if x == 7)
{
 // return double
}
else (if x == 8)
{
 // return short
}
else (if x == 9)
{
 // return long
}
于 2010-08-26T05:59:38.673 回答
4

这可以作为未来参考的替代方案,它可以获得精确值的概率,例如 99.999% 或 0.0001% 要获得概率(实际百分比),请执行以下操作:

//70%
double probability = 0.7;
double result = rand() / RAND_MAX;
if(result < probability)
   //do something

我已经使用这种方法创建了非常大的渗透网格,它就像是精确值的魅力。

于 2013-08-12T07:59:22.070 回答
2

我不知道我是否正确理解您想要做什么,但如果您只想确保概率为 70-10-10-10,请执行以下操作:

  • r在 (1,2,3,4,5,6,7,8,9,10) 中生成一个随机数
  • 如果r <= 7:浮动
  • 如果r == 8:短
  • 如果r == 9:双
  • 如果r == 10:长

我认为您认识并可以使该模式适应任意概率值。

于 2010-08-26T06:00:26.610 回答
1

mmonem 有一个很好的概率开关,但返回不同的类型也不是微不足道的。您需要一个可以充分(出于您的目的)对任何值进行编码的单一类型 - 查看 boost::any、boost::variant、union 或转换为最有能力的类型(可能是双精度)或字符串表示。

于 2010-08-26T06:24:33.843 回答