基于 C 中百分比的概率 运行

Probabilistic Running Based on Percentage in C

我正在审查我认为运行基于概率的代码。我想验证它是否属实。以下代码片段 运行 是否有 80% 的时间?我不太明白为什么要使用 1000,如果我们的工作只是 运行 80% 的代码。

if(rand()%1000<1000*0.8){
 ...
   }

它会 运行 大约 80% 的时间。

  • rand() returns 介于 0 和 RAND_MAX 之间的数字,可能是 2,147,483,647
  • rand() % 1000 将该范围缩小到 0-999,尽管范围前半部分左右的一些数字会稍微更常见一些,因为 RAND_MAX 不能被 1,000[=27 整除=]
  • 1000 * 0.8 就是 800

这里用1000是随意的。表示 80% 的更清晰的方式是:

if (rand() % 100 < 80)

或者只是:

if (rand() < RAND_MAX * 0.8)