2013-12-19

http://anond.hatelabo.jp/20131219201728

いや、そこは理解してるんだけど。。。

experiment1 = function(max) {

iter = 0

freq = rep(0, 6)

while(iter < max) {

dice1 = rdice(1)

dice2 = rdice(1)

if (dice1 == 6 || dice2 == 6) {

freq[dice1] = freq[dice1] + 1

freq[dice2] = freq[dice2] + 1

freq[6] = freq[6] - 1

iter = iter + 1

}

}

freq / max

}

となってますが、

if (dice1 == 6 || dice2 == 6) {

がありますので、この試行は両方が6だった場合に限りカウントされてく(iterが増える)訳で、

まりカウントされた分はすべて両方6の場合なわけで。

おそらく貴方は、一度やった後、確率が1を超えてしまったので

freq[6] = freq[6] - 1

という意味不明処置をしているのだと思うのですが、

実際の結果がどの様な値になったか示して貰えないでしょうか?

このコード

freq[6]/max=1

freq[n]/max=1 (for n=1,2,3,4,5)

以外になり得るとは思えないのですが。

自分コード常識おかしくて、Rと言う言語自分常識外の行動をしている可能性もありますので、結果を見せてもらえれば納得出来るかもしれません。

記事への反応 -
  • http://ideone.com/gIGYPs Rで実験したら増田が正しかった。 トラバとブコメで増田を馬鹿にしてる奴は土下座しなきゃだなw

    • ごめん、R知らないからなんとなくでしか読み取れないけど、 experiment2の方は、単位毎回、 「1回サイコロを投げ、それが6だった時に限り2回目の試行を行い、それがNである確率」 という...

      • 2個のサイコロを同時に振り、どちらかが6だった時をカウントしていく。 カウントの値は以下のように増やしている。 freq[dice1] = freq[dice1] + 1 freq[dice2] = freq[dice2] + 1 freq[6] = freq[6] - 1 dice...

        • いや、そこは理解してるんだけど。。。 experiment1 = function(max) { iter = 0 freq = rep(0, 6) while(iter < max) { dice1 = rdice(1) dice2 = rdice(1) if (dice1 == 6 || dice2 == 6) { freq[dice1] = freq...

          • この試行は両方が6だった場合に限りカウントされてく(iterが増える)訳で、 つまりはカウントされた分はすべて両方6の場合なわけで。 これが間違い。||は論理和なので(dice1 == 6 || dice2 =...

    • コードにしてもらえると増田がどんだけバカかがよく分かっていいな

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん