• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:麻雀において、対子が暗刻になるまでの平均順目2)

麻雀の対子が暗刻になるまでの平均順目

このQ&Aのポイント
  • 麻雀において、対子が暗刻になるまでの平均順目は13.492である。
  • C++のプログラムを使用して計算した結果、対子が暗刻になるまでの平均順目は13.492である。
  • 乱数の精度に関する意見を求めている。計算結果は予想よりも大きかった。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8473/18137)
回答No.1

if (tumochusen[i] < (400 / nhai[i])) { というように比較していますが,これって意図通りなのだろうか? まず400 / nhai[i]はint/intだから答えはintにしかならない。(切り捨てです。) tumochusen[i]は,rand() % 100を計算してdoubleにしていますが,実質的にはintです。 比較は,doubleとdoubleの比較にすべきなんじゃなかろうか? 他にはrand()を使うのならsrand()は使わないの?とか,そもそもrand()を使うべきなの?とかありますが,大勢には影響ありません。 もう一点だけ。 平均巡目はsum / SIMULATEでいいのだろうか?これについてはよくわからないので明確な言い方は避けますが,全員が無作為に打牌するわけではないという事実を完全に無視していますよね。それで求めた計算にどれほどの意味があるのだろうか? 少なくとも,自分からは見えていない牌の集合を考えて,そこから各プレイヤの手牌を推測した上で,ツモる牌の確率分布を考えるといったことまでしないと,計算がかなりずれそうです。実際にどういう計算をすればよいかは聞かないでください。私も答えは持っていません。 ちなみに,あなたが書いたプログラムでも18巡目にならないものだけを取り出して,その平均を取れば9巡目くらいにはすぐなりますよ。

snnnmdr
質問者

お礼

回答ありがとうございます。とても参考になりました。今後もよろしくお願いします。他の方からの意見も聞けるかもしれないので、回答はもうしばらくの間受け付けます 指摘1に関して:doubleとdoubleの比較に変更します。そのほうがいいと思います 指摘2に関して:srand()って、乱数列の並び?を初期化する関数でしたっけ?まだ、乱数の扱いが不慣れですので、どうしたらいいかよくわからなかったのですが、大きくは影響しないとのことなので、このままrand()を使います 指摘3に関して:平均順目はsum / SIMULATEでも、まあいいんじゃないかな、と思います。今回のシュミレーションでは他家は和了放棄のbotとして考えます。他家の手牌の推測等は今後の課題とします 指摘4に関して:暗刻ができる場合だけを取り出して、平均を取ろうとしたことがなかったので、意外でした。著者が言っている平均8順とは、これのことをいっているのかもしれませんね

関連するQ&A