かべぎわブログ

技術的なことについてかけたらいいな…

$RANDOMの精度があまりよくないという話をきいたのでしらべてみる

概要

$RANDOMは乱数としてはそんなに精度が高くないみたいなはなしを聞いたような聞かなかったようなきがしたので雑に調べてみる。

調べ方

  1. echo ${RANDOM}を無限ループでぶん回す
  2. 1億行くらいになったら止める
  3. ばらつきを集計する

1. echo ${RANDOM}を無限ループでぶん回す

だいたいこんなかんじでぶんまわす。

while true
do
    echo ${RANDOM} >> ./random.txt
done

2. 1億行くらいになったら止める

やりすぎた。

$ wc -l random.txt
110424165 random.txt

ちなみにファイルサイズ的にはこんくらい

$ ls -lh random.txt 
-rw-rw-r-- 1 ec2-user ec2-user 597M  6月  1 06:07 random.txt

3. ばらつきを集計する

sortしてuniqしてawkでごにょごにょ

$ sort -n < sample-3.txt | uniq -c | awk '{a+=$1; print $2, $1}'

こんなかんじでどの値が何回出力されたかがわかるようになる。

0 3400
1 3398
2 3352
3 3479
4 3306
5 3391
6 3376
7 3450
8 3376
9 3323

結果

グラフでだすとこんなかんじ f:id:kabegiwakun:20180601154052p:plain

出現回数ランキングでいくとこんなかんじ (2カラム目が出現回数)

おおいランキング

$ cat result.txt | sort -nk 2 -r | head
14330 3614
18986 3580
16599 3575
15505 3575
23779 3570
3823 3564
29794 3564
12101 3564
27530 3563
19883 3563

すくないランキング

$ cat result.txt | sort -nk 2 | head
22708 3126
24616 3153
10652 3154
1871 3158
24720 3164
4305 3169
16935 3173
1124 3174
24263 3175
12221 3176

その差は488

$ echo "3614 - 3126" | bc
488

まとめ

なるほどわからん

新しいシェルプログラミングの教科書

新しいシェルプログラミングの教科書