シェルで指数分布の乱数

性能測定等で指数分布の乱数を発生させたい場合。
発生確率(?)=1とすると、逆数を2回計算するのは不要なんでしょうか。

#!/bin/bash
for i in `seq 1 $1`;
do
    interval=$(echo "interval = -( 1 / (1 / $2) ) * l($RANDOM / 32767); scale=0; interval / 1" | bc -l)
    #echo $interval
    #usleep $interval
done
  • $1 は乱数発生の回数
  • $2 は平均。usleepのマイクロ秒とすると例えば1000000を指定すると、平均1000000us=1sの指数分布の乱数になる(はず)。
    • bashの$RANOMが0-32767なので多少荒いかもしれない。