指定した範囲のランダムな値を返す
コード例
// min以上max未満のランダムな値を返す
export function range(min: number, max: number): number {
return min + (max - min) * Math.random();
}
// min以上max以下のランダムな整数を返す
// max未満にしたい場合は下記の+1を削除する
export function rangeInt(min: number, max: number): number {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(range(min, max + 1));
}
import { range, rangeInt } from "./random";
console.log(range(0, 100)); // 79.59292871067693
console.log(rangeInt(0, 100)); // 11
ソースコード
解説/アルゴリズム
min ~ max の範囲は max - min
で求める。
max - min
と Math.random()
を掛けあわせ、 0 以上 max - min 未満の乱数を作る。
下限が 0 になっているので min を足し合わせることで、 min 以上 max - min + min 未満の乱数、つまり min 以上 max 未満の乱数を作る。
整数に変換をする場合はまず引数で渡された min と max を整数に変換する必要がある。
例えば min = 3 なら整数なので 3 のままだが、 3.2 のような値だと min 以上の整数に該当する最小値は 4 になる。なので min に対して切り上げ処理を行う。
同じように max も整数ならそのまま、 5.6 のような値だと max 以下の整数に該当する最大値は 5 になるので、 max に対して切り捨て処理を行う。
あとは min と max を range() に渡せばいいのだが、整数の乱数の場合、 min 以上 max 以下の範囲が便利だと思っているので、 range(min, max + 1) を渡すようにしている。