我正在审查一个我认为是基于概率运行的代码。我想验证一下这是不是真的。下面的代码片段是否有80%的时间在运行?我不太明白,如果我们的工作仅仅是在80%的时间内运行一段代码,为什么要使用1000呢?
if(rand()%1000<1000*0.8){
...
}
它将运行大约80%的时间。
rand()
返回一个介于0和 RAND_MAX
大概是2,147,483,647个。rand() % 1000
把这个范围缩小到0-999,不过在这个范围的前半部分左右的一些数字会稍微常见一些,因为 RAND_MAX
不等式1000 * 0.8
仅为800这里使用1,000是随意的。更明确的表示80%的方式是:。
if (rand() % 100 < 80)
或只是:
if (rand() < RAND_MAX * 0.8)