整数の乱数を発生させる
乱数とは、不規則かつ等確率に現れる数値のことです。統計の無作為抽出や暗号に使います。おみくじのプログラムを作ったりするときには、各おみくじの内容に数字を割り当てて、そのある範囲内でランダムに取り出せるように、乱数を使います。
GASで乱数を生成するためには、Mathオブジェクトのrandomメソッドを使います。
※Mathオブジェクトについては次の記事を参考にしてください。
Mathオブジェクトのrandamメソッド
構文は上のようになっていますが、そのまま使うと0以上1未満のいずれかの数値を返します。
function test() {
// 0以上1未満のいずれかの数値を返す
// (実行するたびに返される数字が違う)
Logger.log(Math.random()) // 0.9212393688392433
Logger.log(Math.random()) // 0.699084311805735
Logger.log(Math.random()) // 0.39423182504318977
}
でも、0以上1未満って使いにくいですよね。
使いやすい乱数を取り出すには次のような工夫が必要です。
指定範囲内の整数を取り出す方法
x~yの範囲で乱数を発生させることを考えてみます。
Math.random() * (y – x) + x
こんな感じの式で範囲内の数値で絞れます。
よくわかんないと思うので、実際に数値を入れてみましょう。
x に10、y に25を入れてみます。
Math.random() * (25 – 10) +10
→ Math.random() * (15) +10
となります。
掛け算と足し算は掛け算の方が先ですね。
Math.randomメソッドで生成されるのは、0以上1未満なので、
0 * -15 + 10 = 10
0.99999 * 15 + 10 = 14.999985
となるので、指定の範囲内での抽出になることが分かります。
しかしこれでは、小数点以下の数値が入ってきてしまいますね。
小数点以下の数値を整数に変換するには、floorメソッドを使います。
floorメソッドは、引数に指定した数値の小数点以下を切り捨てた数値を返してくれます。
これと先程のrandomメソッドを使ったプログラムを組み合わせましょう。
Math.floor( Math.random() * (y – x) + x )
これで、整数の乱数を発生させることが出来るようになりました。
function test() {
// 整数の乱数を発生させる
// (実行するたびに返される数字が違う)
var x = 10
var y = 25
Logger.log(Math.floor(Math.random()*(y-x)+x)) // 13.0
Logger.log(Math.floor(Math.random()*(y-x)+x)) // 23.0
Logger.log(Math.floor(Math.random()*(y-x)+x)) // 19.0
}
まとめ
乱数を発生させたいケースは結構あると思うので、しっかり理解してくださいね!
コメント