アプリ版:「スタンプのみでお礼する」機能のリリースについて

よろしくお願いします。

VB6.0でサイコロの目1-6を出す計算式として、

Int(Rnd() * 6) + 1

というものをよく見かけますが、これだと均等に1-6が出現しないような気がします。

Rnd()は0-1の値を返して、その値は全くランダムに返されるのだから、
戻り値が0<=かつ<0.1の場合はサイコロの目は1となり
0.1<=かつ<0.2ならサイコロの目は1となり

戻り値が0.2<=かつ<0.3なら目は2
0.3<=かつ<0.4なら2

戻り値が0.4<=かつ<0.5なら目は3
それなら次の、戻り値が0.5<=かつ<0.6なら目は3かと思えば、そうでなく4になってしまいます。

以下、
戻り値0.6台なら目は4
戻り値0.7台なら目は5
戻り値0.8台なら目は5
戻り値0.9台なら目は6

となり、これではぜんぜん均等にばらけないではないか?と思ったのですが、

実際に100000回計算させてそれぞれの出現回数を調べるとほぼ均等にばらけて
いるように見えます。

一体どうしてなのでしょうか?

A 回答 (4件)

まず、Rnd()は0.000000・・・から0.999999・・・の範囲です。


これを6倍すると0.00000000から5.99999999になります。
1を足して1.00000000から6.9999999ですね。
従って
1.0000000から1.9999999が1
2.0000000から2.9999999が2
同様に
6.0000000から6.9999999が6
ということになります。
    • good
    • 0
この回答へのお礼

ありがとうございます。ともてわかりやすく、すっきりしました。

お礼日時:2005/09/29 18:54

Rnd()関数は不定値を返すだけの関数です。



>Int(Rnd() * 6) + 1
>というものをよく見かけますが、これだと均等に1-6が出現しないような気がします。
乱数からでは確立を求めることは不可能です。

統計は「振った回数」と「出目」による比率です。
確立は「全パターン」と「出目パターン」による比率です。

最近、サイコロ関係でアドバイスをしたことがあるので、そちらを参考にどうぞ。
http://okweb.jp/kotaeru.php3?q=1673395
[サイコロの出る目の確立をプログラムで出すには??]


>実際に100000回計算させてそれぞれの出現回数を調べるとほぼ均等にばらけているように見えます。
もし、バラバラにならなければ、Rnd()関数の意味が無くなってしまいますよ^^;;;;
    • good
    • 0
この回答へのお礼

な、なるほど。今まで統計と確率の違いなんて考えても見ませんでした。
リンク先のサンプル、ちょっと理解するのに時間を要しそうですが、
なんとかがんばってみます。
どうもありがとうございました。

お礼日時:2005/09/29 18:48

Rnd()は0-1の値を返すのなら、


Rnd() * 6の計算は、0-6を返します。
よって、
Int(Rnd() * 6) + 1は1-6の整数を一様に返すことになります。

言い換えると、
0<= 戻り値 <0.166666667 なら、目は 1
0.166666667<= 戻り値 <0.333333333 なら、目は 2
0.333333333<= 戻り値 <0.5 なら、目は 3
0.5<= 戻り値 <0.666666667 なら、目は 4
0.666666667<= 戻り値 <0.833333333 なら、目は 5
0.833333333<= 戻り値 <1 なら、目は 6

になります。
    • good
    • 0
この回答へのお礼

>Rnd()は0-1の値を返すのなら、
>Rnd() * 6の計算は、0-6を返します。

なるほど、こう考えれば計算する必要もありませんでした。
ありがとうございました。

お礼日時:2005/09/29 18:46

 区切り方を0.1で切るとそのように見えますが、


実際は0.1ごとの乱数を発生するわけではなく、
もっと桁数の多い乱数が出ます。

>戻り値0.6台なら目は4

本当にそうですか?
0.67を超えれば、目は5になりますよ。

0~0.166666 目が1
 ~0.333333 目が2
 ~0.5     目が3
 ~0.666667 目が4
 ~0.833333 目が5
 ~0.999999 目が6
いずれも幅は0.133333・・です。
おかしくありません。

この回答への補足

すみません。

>いずれも幅は

というところは間違いですよね?

補足日時:2005/09/29 18:51
    • good
    • 0
この回答へのお礼

は、恥ずかしいです。とんでもない勘違いでした。
諭していただきありがとうございます。

お礼日時:2005/09/29 18:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!