ぎるばーとのノート

もっともっと遠くへ行きたい 空が広く見える場所まで

乱数の端点【ときどき分布・4記事目】

乱数の端点

そのrandom関数、0と1は出る?

 多くの言語では、標準一様分布を再現するような乱数が提供されます。randomのような名前の関数を呼べば、0から1までの浮動小数点型数値がランダムに生成される、といった具合です。

 ここで、生成される乱数の値に端点が含まれるかどうかが問題になります。
 理想的な連続確率分布であれば、とりうる値それぞれに対応する確率は0であり、端点の確率も0です。連続確率分布では区間に対して確率が割り当てられます。
 乱数の場合は(浮動小数点型や言語仕様の制約により)有限個の値のうちからなので、端点の扱いを明確にしないといけません。0を含むか? 1を含むか? ありえる組み合わせは4種類です。

  • [0, 1]上の乱数
  • [0, 1)上の乱数
  • (0, 1]上の乱数
  • (0, 1)上の乱数

 上記のうち[0, 1)上の乱数、つまり「0が出る可能性はあり、1は出ない」が標準的だと思います。
 [0, 1)上の乱数があれば、(0, 1]や(0, 1)のものに変えられます。

  • [0, 1) → (0, 1]は、1から値を引く
  • [0, 1) → (0, 1)は、0でない値が出るまで繰り返し

 残りの[0, 1]については、うまい方法がすぐには思いつきません。まあ、[0, 1]上の乱数が必要な場面も考えにくく、不自然なものなのかも……。