5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Bash】$RANDOMを使って任意の範囲までの乱数 / ランダムな浮動小数点数を生成

Posted at

概要

Bashシェルスクリプト$RANDOMを使って、任意の範囲までの乱数を生成したり、小数点以下の範囲で生成したりしましたのでまとめます。

$RANDOMとは

Bashシェルスクリプトで使用できる特殊な環境変数。
$PATHとかと同じ組み込み変数ですね。

0から32767までの範囲の疑似乱数を生成します。
16ビット符号なし整数(2の16乗 - 1)の範囲に相当。
システムの現在時刻をシード値として使用し、それに基づいて乱数を生成するとか。

サンプルスクリプト

test-random.sh
#!/bin/bash
# 現在の日付の時刻
echo `date "+%Y/%m/%d %H:%M:%S"`

# 0 〜 32767 の間でランダムな数値を取得
echo $RANDOM

# 0 〜 65535 の間でランダムな数値を取得
echo $((RANDOM + RANDOM))

# 1から6までのランダムな整数を生成 (サイコロの目)
echo $((RANDOM % 6 + 1))

# 0からNまでの範囲の乱数を生成
N=10  # Nを設定
echo $((RANDOM % (N + 1)))

# ランダムな浮動小数点数を生成
echo $(bc <<< "scale=5; $RANDOM/32767")

出力結果:

2023/09/14 23:17:59
19929
40718
5
1
.34003

小数点以下5桁までの精度で0から1の間の乱数を生成

echo $(bc <<< "scale=5; $RANDOM/32767")

上記について。

  • bcコマンド: 任意の精度で計算を行うためのコマンドライン
  • <<<演算子: ヒアストリング(here string)を提供。ヒアストリングを使用すると、文字列をコマンドに渡すことができる。
  • "scale=5; $RANDOM/32767": ヒアストリングによって、bcに渡される計算式。
    • scale=5: 小数点以下5桁を指定
    • $RANDOM:0から32767までのランダムな整数を生成
    • /32767:32767で割って、0から1の範囲の浮動小数点数を生成

これにより、小数点以下5桁までの精度で0から1の間のランダムな浮動小数点数を生成できます。

5桁を指定しない場合は、-lオプションをつける必要があります。これは、"load"を意味し、bcコマンドが起動するときに数学ライブラリを読み込むためのオプションです。

echo $(bc -l <<< "$RANDOM/32767")

# 結果
# .02777184362315744499
5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?