c - 在 C 中提取给定概率的数字

标签 c arrays random probability

假设我有一个数组 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/

相关文章:

c - 为什么 %x 和 %o 被视为无符号整数?

arrays - 是否可以使用 SIMD 对 C 中的非平凡循环进行矢量化? (复用一个输入的多长度 5 double 点积)

javascript - 比较 2 个数组的差异(找到对称差异)

python - 如何用自己的生成器覆盖Python的随机数?

python - 如何在python中使用随机形成函数的恒定结果

c - 解释我的代码在做什么 (C)

c - 函数 ptrs 数组上的 realloc() 导致 SIGABRT

c++ - “wcsncasecmp”未在此范围内声明

java - 检查一个字符串是否包含另一个字符串的字符的最快方法是什么?

javascript - 如何让一个数字出现在0到9的范围内?