提取C中具有给定概率的数字

时间:2019-06-19 12:51:50

标签: c arrays random probability

假设我有一个probabilities = [0.1, 0.2, ..., 0.1, 0.4]个元素的数组n。这些是浮点值,而不是整数权重。

如何使用Ansi C中给定的概率从1n中提取随机整数?

probabilities = [0.1, 0.2, 0.1, 0.15, 0.05, 0.1, 0.4]
extract_random_integer(probabilities)

1 个答案:

答案 0 :(得分:-1)

生成一个从0到sum of all probabilities的随机浮点值。

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

主要思想是,您生成一个浮点数,并检查该数字是否属于概率范围。