テーマ:サイコロの目で同じ目が連続で出る確率の検証
さて、テーマ通りの事をしよう。
先ず、サイコロは六面サイコロを使う。
又、実際に振ると面倒なので、コンピュータに振ってもらう。
擬似乱数なので、何度も繰り返して検証する。
とりあえず、
連続でn回出る場合の確率を求めよう。
まぁ、大げさでも何でもなくて、6^-nである。
(6のn乗分の1)
という事は、分母だけ並べると、
1回:6
2回:36
3回:216
4回:1296
5回:7776
6回:46656
7回:279936
8回:1679616
9回:10077696
10回:60466176
11回:362797056
つまり、これの六倍の回数振れば、その回数が出るというわけだ。
例えば、8回連続で出る場合は、
1679616×6=10077696
よって、一千万回振れば、どの目も一度は八回連続で出るはずだ。
9回連続で出る場合は、
10077696×6=60466176
よって、六千万回振れば・・・。
実際に検証してみよう。
面倒なので、急造プログラムですまない。
実に幼稚だが、この程度の問題には十分だろう。
で、試しに一千万回振ってみよう。
すると、以下の様になった。
六回しかやっていないので、そこまで正確ではないが、
全体的に平均8弱は出ている。
予想は当たっていたようだ。
さて、次に9回連続すると予想した六千万回振ってみよう。
あれ?
何故であろうか、9回というより8回だ。
まぁ、理由は分からない。
ちなみに、10回連続で出るであろう三億六千万回も振ってみた。
ただ、時間が掛かるので、一回しか検証していない。
桁溢れで確率が滅茶苦茶になっているが、計算自体は間違っていないので気にしないように。
三億六千万回では、平均すると9回連続で出た。
不思議である。
まぁ、単に最初の私の確率計算が間違っているだけなのかもしれない。
さて、そんな事はともかく、
驚くべき事は、三億六千万回連続で振っても10回連続で同じ目が出るのは珍しいという事だ。
結論として、
サイコロに何度も連続で同じ数が出てくれるように頼むのは無意味だという事だ。
先ず、サイコロは六面サイコロを使う。
又、実際に振ると面倒なので、コンピュータに振ってもらう。
擬似乱数なので、何度も繰り返して検証する。
とりあえず、
連続でn回出る場合の確率を求めよう。
まぁ、大げさでも何でもなくて、6^-nである。
(6のn乗分の1)
という事は、分母だけ並べると、
1回:6
2回:36
3回:216
4回:1296
5回:7776
6回:46656
7回:279936
8回:1679616
9回:10077696
10回:60466176
11回:362797056
つまり、これの六倍の回数振れば、その回数が出るというわけだ。
例えば、8回連続で出る場合は、
1679616×6=10077696
よって、一千万回振れば、どの目も一度は八回連続で出るはずだ。
9回連続で出る場合は、
10077696×6=60466176
よって、六千万回振れば・・・。
実際に検証してみよう。
#include<iostream> #include<cstdlib> #include<ctime> #include<conio> int main(void){ using namespace std; srand((unsigned)time(NULL)); int array_1[6]; int array_2[6]; int x,y,z; int n,m; double t; FIRST: for(x = 0;x < 6;x++){ array_1[x] = 0; array_2[x] = 0; } x = 0; y = 7; z = 0; cout <<"何回振りますか?:"; cin >> n; if(!n)goto FINISH; m = n; while(n){ x = (rand()%6); array_1[x]++; if(y == x)z++; else if(y != x){ if(array_2[y] < z)array_2[y] = z; z = 0; } else if(z == 0)z = 1; y = x; n--; } cout <<"n結果表示n"; for(x = 0;x < 6;x++){ t = (array_1[x]*100/m); cout <<"サイコロの目:"<<(x+1)<<" "<< array_1[x] <<"/"<< m <<" "<< t <<"%"<< endl; } cout <<"最大連続回数n"; for(x = 0;x < 6;x++) cout <<"サイコロの目:"<<(x+1)<<" "<< array_2[x] << endl; cout <<"n"<< endl; goto FIRST; FINISH: getch(); return 0; } //EOF
面倒なので、急造プログラムですまない。
実に幼稚だが、この程度の問題には十分だろう。
で、試しに一千万回振ってみよう。
すると、以下の様になった。
何回振りますか?:10000000 結果表示 サイコロの目:1 1664167/10000000 16% サイコロの目:2 1666930/10000000 16% サイコロの目:3 1667150/10000000 16% サイコロの目:4 1666326/10000000 16% サイコロの目:5 1668718/10000000 16% サイコロの目:6 1666709/10000000 16% 最大連続回数 サイコロの目:1 7 サイコロの目:2 7 サイコロの目:3 8 サイコロの目:4 7 サイコロの目:5 9 サイコロの目:6 7 何回振りますか?:10000000 結果表示 サイコロの目:1 1664573/10000000 16% サイコロの目:2 1667741/10000000 16% サイコロの目:3 1665825/10000000 16% サイコロの目:4 1666706/10000000 16% サイコロの目:5 1669599/10000000 16% サイコロの目:6 1665556/10000000 16% 最大連続回数 サイコロの目:1 8 サイコロの目:2 7 サイコロの目:3 7 サイコロの目:4 7 サイコロの目:5 9 サイコロの目:6 7 何回振りますか?:10000000 結果表示 サイコロの目:1 1665631/10000000 16% サイコロの目:2 1665434/10000000 16% サイコロの目:3 1668166/10000000 16% サイコロの目:4 1668036/10000000 16% サイコロの目:5 1666184/10000000 16% サイコロの目:6 1666549/10000000 16% 最大連続回数 サイコロの目:1 7 サイコロの目:2 7 サイコロの目:3 7 サイコロの目:4 8 サイコロの目:5 8 サイコロの目:6 7 何回振りますか?:10000000 結果表示 サイコロの目:1 1666897/10000000 16% サイコロの目:2 1667468/10000000 16% サイコロの目:3 1666817/10000000 16% サイコロの目:4 1665113/10000000 16% サイコロの目:5 1666241/10000000 16% サイコロの目:6 1667464/10000000 16% 最大連続回数 サイコロの目:1 6 サイコロの目:2 7 サイコロの目:3 7 サイコロの目:4 7 サイコロの目:5 7 サイコロの目:6 6 何回振りますか?:10000000 結果表示 サイコロの目:1 1669723/10000000 16% サイコロの目:2 1666602/10000000 16% サイコロの目:3 1664982/10000000 16% サイコロの目:4 1665471/10000000 16% サイコロの目:5 1665326/10000000 16% サイコロの目:6 1667896/10000000 16% 最大連続回数 サイコロの目:1 7 サイコロの目:2 8 サイコロの目:3 8 サイコロの目:4 7 サイコロの目:5 7 サイコロの目:6 8 何回振りますか?:10000000 結果表示 サイコロの目:1 1667941/10000000 16% サイコロの目:2 1666458/10000000 16% サイコロの目:3 1664898/10000000 16% サイコロの目:4 1665415/10000000 16% サイコロの目:5 1667120/10000000 16% サイコロの目:6 1668168/10000000 16% 最大連続回数 サイコロの目:1 8 サイコロの目:2 7 サイコロの目:3 8 サイコロの目:4 8 サイコロの目:5 7 サイコロの目:6 7 |
全体的に平均8弱は出ている。
予想は当たっていたようだ。
さて、次に9回連続すると予想した六千万回振ってみよう。
何回振りますか?:60000000 結果表示 サイコロの目:1 10000289/60000000 16% サイコロの目:2 10003091/60000000 16% サイコロの目:3 10002920/60000000 16% サイコロの目:4 9999464/60000000 16% サイコロの目:5 9996818/60000000 16% サイコロの目:6 9997418/60000000 16% 最大連続回数 サイコロの目:1 8 サイコロの目:2 8 サイコロの目:3 8 サイコロの目:4 8 サイコロの目:5 8 サイコロの目:6 8 何回振りますか?:60000000 結果表示 サイコロの目:1 10000450/60000000 16% サイコロの目:2 10003003/60000000 16% サイコロの目:3 9996308/60000000 16% サイコロの目:4 9998357/60000000 16% サイコロの目:5 10003212/60000000 16% サイコロの目:6 9998670/60000000 16% 最大連続回数 サイコロの目:1 8 サイコロの目:2 7 サイコロの目:3 8 サイコロの目:4 8 サイコロの目:5 8 サイコロの目:6 8 何回振りますか?:60000000 結果表示 サイコロの目:1 9999559/60000000 16% サイコロの目:2 9998858/60000000 16% サイコロの目:3 10000894/60000000 16% サイコロの目:4 9999672/60000000 16% サイコロの目:5 9999432/60000000 16% サイコロの目:6 10001585/60000000 16% 最大連続回数 サイコロの目:1 8 サイコロの目:2 8 サイコロの目:3 8 サイコロの目:4 8 サイコロの目:5 8 サイコロの目:6 8 何回振りますか?:60000000 結果表示 サイコロの目:1 10001009/60000000 16% サイコロの目:2 9997641/60000000 16% サイコロの目:3 10002623/60000000 16% サイコロの目:4 10002733/60000000 16% サイコロの目:5 9996505/60000000 16% サイコロの目:6 9999489/60000000 16% 最大連続回数 サイコロの目:1 7 サイコロの目:2 8 サイコロの目:3 8 サイコロの目:4 9 サイコロの目:5 8 サイコロの目:6 9 何回振りますか?:60000000 結果表示 サイコロの目:1 10001182/60000000 16% サイコロの目:2 9994142/60000000 16% サイコロの目:3 10001916/60000000 16% サイコロの目:4 10005075/60000000 16% サイコロの目:5 9996934/60000000 16% サイコロの目:6 10000751/60000000 16% 最大連続回数 サイコロの目:1 8 サイコロの目:2 8 サイコロの目:3 9 サイコロの目:4 7 サイコロの目:5 8 サイコロの目:6 8 何回振りますか?:60000000 結果表示 サイコロの目:1 9994929/60000000 16% サイコロの目:2 10001002/60000000 16% サイコロの目:3 10003359/60000000 16% サイコロの目:4 10000562/60000000 16% サイコロの目:5 10001613/60000000 16% サイコロの目:6 9998535/60000000 16% 最大連続回数 サイコロの目:1 8 サイコロの目:2 8 サイコロの目:3 8 サイコロの目:4 8 サイコロの目:5 8 サイコロの目:6 8 |
何故であろうか、9回というより8回だ。
まぁ、理由は分からない。
ちなみに、10回連続で出るであろう三億六千万回も振ってみた。
ただ、時間が掛かるので、一回しか検証していない。
何回振りますか?:360000000 結果表示 サイコロの目:1 60017105/360000000 4% サイコロの目:2 60017441/360000000 4% サイコロの目:3 59990179/360000000 4% サイコロの目:4 59999047/360000000 4% サイコロの目:5 59992777/360000000 4% サイコロの目:6 59983451/360000000 4% 最大連続回数 サイコロの目:1 9 サイコロの目:2 9 サイコロの目:3 8 サイコロの目:4 9 サイコロの目:5 9 サイコロの目:6 10 |
三億六千万回では、平均すると9回連続で出た。
不思議である。
まぁ、単に最初の私の確率計算が間違っているだけなのかもしれない。
さて、そんな事はともかく、
驚くべき事は、三億六千万回連続で振っても10回連続で同じ目が出るのは珍しいという事だ。
結論として、
サイコロに何度も連続で同じ数が出てくれるように頼むのは無意味だという事だ。
以上