我有一些函数可以生成double,float,short,long随机值。我有另一个函数,我传递数据类型,并应返回一个随机值。现在我需要在该函数中选择基于传递的数据类型的返回值。例如,如果我传递float,我需要:
回报是浮动的概率是70%,回报是双倍,短期或长期的概率是10%。我可以调用其他函数来生成相应的随机值,但是如何适应最终返回的概率权重?我的代码是用C ++编写的。
赞赏一些指示。
感谢。
答案 0 :(得分:4)
C ++随机数有uniform distribution。如果您需要另一个random variables的distribution,则需要将其数学公式建立在均匀分布上。
如果你的随机变量没有数学公式,你可以这样做:
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
}
答案 1 :(得分:3)
这可以作为未来参考的替代方案 得到精确值的概率,如99.999%或0.0001% 要获得概率(实际百分比),请执行以下操作:
//70%
double probability = 0.7;
double result = rand() / RAND_MAX;
if(result < probability)
//do something
我已经使用这种方法来创建非常大的渗透网格,它就像精确值的魅力一样。
答案 2 :(得分:2)
我不知道我是否理解你想做什么,但如果你只是想确保概率为70-10-10-10,请执行以下操作:
r
r <= 7
:float r == 8
:short r == 9
:double r == 10
:long 我认为您认识并且可以使模式适应任意概率值。
答案 3 :(得分:1)
mmonem有一个很好的概率开关,但返回不同的类型也不是微不足道的。你需要一个可以充分(为了你的目的)编码任何值的单一类型 - 检查boost :: any,boost :: variant,union,或转换为最有能力的类型(可能是double),或者字符串表示。