假设我有一个数组 probabilities = [0.1, 0.2, ..., 0.1, 0.4]
的n
元素。这些是浮点值,而不是整数权重。
如何从 1
中提取随机整数至n
具有 Ansi C 中给定的概率?
probabilities = [0.1, 0.2, 0.1, 0.15, 0.05, 0.1, 0.4]
extract_random_integer(probabilities)
最佳答案
生成一个从 0 到所有概率之和
的随机浮点值。
float probabilities[] = [0.1, 0.2, 0.1, 0.15, 0.05, 0.1, 0.4];
float x = 0.0000001+(float)rand()/(float)(RAND_MAX/sum_probabilites);
float temp = 0;
int i=0;
int n = 7;
int number = 0;
for(i=0; i<n; i++)
{
temp+=probabilites[i];
if(x<=temp)
{
number = i+1;
break;
}
}
// int number contains value
主要思想是生成一个 float 并检查该数字是否属于概率范围。
关于c - 在 C 中提取给定概率的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56668105/