みだらな乱数の乱れ具合は?
皆様お元気ですか?
インフラ担当の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回振ってみよう!