LoginSignup
0
0

More than 3 years have passed since last update.

【VanillaJS】Nパーセントの確率でtrueを返すメソッド

Last updated at Posted at 2020-10-04

これ

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が無理数の場合の証明とかどうなるんでしょうね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0