我有一些功能会产生双重,浮点,短,长随机值。我有另一个通过数据类型的功能,并且应该返回随机值。现在,我需要根据传递的数据类型在该函数中选择返回值。例如,如果我经过浮动,我需要:

回报为浮点的概率为70%,返回的概率为双重,短或长度为10%。我可以调用其他函数以生成相应的随机值,但是如何适合最终返回的概率权重呢?我的代码在C ++中。

一些指针表示赞赏。

谢谢。

有帮助吗?

解决方案

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
}

其他提示

这可以作为将来参考的替代方法,可以获得确切值的概率,例如99.999%或0.0001%获得概率(实际百分比)这样做:

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

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

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

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

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

Mmonem具有一个不错的概率开关,但是返回不同类型也不是微不足道的。您需要一种可以充分(出于您的目的)编码任何值的单一类型 - 查看BOOST :: ANY,BOOST ::变体,联合或转换为最有能力的类型(可能是双重)或字符串表示。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top