乱数の端点
その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]上の乱数が必要な場面も考えにくく、不自然なものなのかも……。