编程语言中自带的随机数生成器,输出一般是下面两种之一:

    1. 一个位于 [0,1) 区间内的、均匀分布的随机小数;
    2. 一个位于 [0,M) 区间内的、均匀分布的随机整数,其中 M 是一个很大的整数。

    如果你选用的编程语言输出第一种随机数 rand(),而你想要某事件以概率 p 发生,那么可以用 rand() < p 作为条件。

    如果你选用的编程语言输出第二种随机数 rand(),而你想要某事件以概率 p 发生,那么可以用 rand() < M * p 作为条件。

    不过一般情况下我们不知道 M,或者不希望程序依赖 M,那么可以把 p 表示成分数形式 a/b,用 rand() % b < a 作为条件。

    注意 rand() % b 在 b 不是 M 的约数时会偏离均匀分布,不过大多数编程语言中的 M 足够大,偏差可以忽略。但有个别编程语言中的 M 是 32768,这个范围就有点小。为此可以用 rand() * M + rand() 造出一个 [0, M^2) 的均匀分布的随机数,再对 b 取余。