みだらな乱数の乱れ具合は?

皆様お元気ですか?

インフラ担当のhirakuriと申します。

自分では、

・怠惰(Laziness)

・短気(Impatience)

・傲慢(Hubris)

をすべて兼ね備えていると自負しておりますが、 怠惰がすぎるのかコードを書くのは苦手で、インフラを担当しております。 もちろんインフラは好きです。

できれば頭に思い描くだけで、ブログが完成しないかと強く希望しております!!

 

さて、私はこの世界に足を踏み入れていらい、 様々な言語で使用している乱数はどの程度お行儀よく乱れているのか気になっておりました。 気にはなっていましたが、めんどうなのでほっときました。 今回ブログを書く機会を得ましたので、rubyのrandを使って実験してみようと思います。

 

randを使って、サイコロの簡単なコードを書きました。

以下のようなコードです。 このコードを1回実行すると、サイコロを100回振ったことに相当します。

#! /usr/bin/env ruby

6.times do |i|
    var="@num#{i+1}" 
    eval("#{var} = 0") 
end

100.times do
    result = rand(1..6)
    eval("@num#{result} += 1")
end

6.times do |i|
    p "@num#{i+1}"
    puts eval("@num#{i+1}")
end


10回実行しました。
その結果をまとめると以下のようになりました。

1が出た回数 2が出た回数 3が出た回数 4が出た回数 5が出た回数 6が出た回数
1〜100回目試行 11 21 18 17 15 18
101〜200回目試行 15 12 16 23 14 20
201〜300回目試行 19 16 19 13 18 15
301〜400回目試行 12 15 22 20 15 16
401〜500回目試行 17 17 23 18 14 11
501〜600回目試行 9 17 18 18 20 18
601〜700回目試行 16 14 18 17 14 21
701〜800回目試行 14 16 19 8 22 21
801〜900回目試行 12 20 22 15 12 19
901〜1000回目試行 16 16 20 13 23 12
累計 141 164 195 162 167 171


結構偏りがあるような気がします。
実装がへぼいのでしょうか、それとも私の使い方が悪いのでしょうか?
それとも現実もこんな感じで、現実をリアルに実装してるのでしょうか?
今度、サイコロを実際に1000回振ってみよう!