これ
function Nパーセントの確率でtrueを返すメソッド(n) {
return Math.random() < n / 100;
}
必要なら引数の型チェックなり範囲チェックなりしてください。
チラ裏
何故、Nパーセントの確率でtrueになるのか?
数学初心者未満がにわかながら考えてみた。
Math.random()
は[0, 1)の範囲の値を返す。
※ [a, b)はa以上b未満という意味
面倒くさいのでNは0以上100以下の整数とする。
\begin{align}
[0, 1) &= [0, \frac{1}{100})\cup[\frac{1}{100}, \frac{2}{100})\cup \cdots\cup[\frac{99}{100}, 1)\\
&=\bigcup_{n=0}^{99}[\frac{n}{100}, \frac{n}{100} + \frac{1}{100})
\end{align}
[0, 1)内の任意の値は100個ある互いに素な集合[n/100, n/100 + 1/100)(n ∈ {0,1,...,99})のいずれかに含まれる。
そして[0, 1)からランダムに取り出した値(以下takosuとする)が、ある集合[a/100, a/100 + 1/100)(a ∈ {0,1,...,99})に含まれる確率は同様に確からしい。(知らんけど)
このとき、takosuが互いに素なN個の集合[a/100, a/100 + 1/100)(a ∈ {0,1,...,99})のいずれかに含まれる確率は100個の中のN個なので、N/100(※1)
また、takosuがN/100よりも小さい確率は、takosuが[0, N/100)に含まれる確率と同じ。(※2)
\begin{align}
[0, \frac{N}{100}) &= \underbrace{[0, \frac{1}{100})\cup[\frac{1}{100}, \frac{2}{100})\cup \cdots\cup[\frac{N-1}{100}, \frac{N}{100})}_{N個}
\end{align}
(※1)(※2)より、Math.random() < N / 100
はNパーセントでtrueを返す。(証明終了)
多分こんな感じ
Nが無理数の場合の証明とかどうなるんでしょうね。