スポンサーリンク
※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~
目次
はじめに
※目次用の記事:ギャンブルの賭け方の種類をまとめてみた
賭け方にはいくつか種類がある。
そのうちの一つであるダランベール法というのがある。
※ダランベール法はピラミッド法ともよばれることがある
この記事では、ダランベール法とはなにかを説明して、プログラムによるシミュレーション結果を示す。
ダランベール法とは
最初の賭け金額を自分で設定する。
負けた場合:次の勝負の賭け金を、1増やす
勝った場合:次の勝負の賭け金を、1減らす
※逆ダランベールという手法も存在する
逆ダランベール法は、ダランベール法と勝った時と負けた時の対応が逆になる。
負けた場合:次の勝負の賭け金を、1減らす
勝った場合:次の勝負の賭け金を、1増やす
逆ダランベール法をダランベール法として紹介しているサイトが一部見受けられる……
<ダランベール法の特徴>
- 勝った時は、少なく賭けて、負けている時は多く賭ける、手法といえる。
- 賭けるお金の変動が±1なので、賭け金の変動が少ない。
- 勝率が50%の勝負に対して適用するのが一般的
※勝率が50%を切る勝負だと、負ける回数の方がおおくなるので、賭け金がどんどん膨らむ。一方で、勝率が50%を超える勝負だと、すぐに、賭ける金額が小さくなる。勝率が50%に近い勝負に使われる手法といえる。
<実践上の問題>
最初にスタートする金額を20とした場合に、勝ち続けて、勝敗差が20になったとする。
その場合賭ける金額は0になる。
場合賭ける金額は0になった場合どうするか、以下の2つのパターンが考えられる
(a)勝負をいったんやめる
(b)賭ける金額を1にして、勝負を続行する
もしも(b)のパターンを考えた時に、ちょっと考えないといけないことがある。
ダランベール法に従う場合、賭け金は
(賭ける金額)=(最初にスタートする金額)-(これまでの勝敗差)
になる。
勝率が50%のゲームに挑んだ場合で、賭ける金額が20にした時を普通に考えると、勝負が進んでも、勝つ確率と負ける確率が半々なので、賭ける金額もプラス・マイナスがキャンセルされ、期待値的には20に収まるように思える。
しかし、勝敗差が20を超えてしまう場合、(b)パターンにおいて、(賭ける金額)が最低である1になる。
こうなると、
(賭ける金額)=(最初にスタートする金額)-(これまでの勝敗差)
は正しくなくなる。
正確には、勝敗差が20以上になった分だけ、賭ける金額が増える。
これは、勝負を重ねていくうちに
(賭ける金額)=(最初にスタートする金額)-(これまでの勝敗差)+α
されることを意味する。
これをどのように対処するかで、次の3パターン考えられる
(1) 上限を設けない
(2) 上限を設ける
※例えば、(最初にスタートする金額)の2倍を最大値とする
(3)勝敗差が最初にスタートする金額を超えない限り、(最初にスタートする金額)-(これまでの勝敗差)の式に従う。
※(最初にスタートする金額)-(これまでの勝敗差)が0以下になる場合は、1とする
ダランベール法の検証
以下では2種類のプログラムを紹介する。
上限を設けないダランベール法を主に扱う。上限を設けた場合のプログラムは、この記事の一番最後の部分で、参考までに乗せておく
言語はC++で作ったが、C言語としてコンパイルしても動くと思う
※このプログラムを組んだ人間は、大学時代に少しプログラムをかじった程度の戦闘能力しかない
ダランベール法(上限なし)の個別シミュレーション
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> int main() { int i=0; int i_max=100000;//勝負回数 double w=2.0; //賭け金の変換率(2倍以上)(win) double p=50; //勝率(50%以下)(probability) double m_min=1;//最小の賭け金額(money) double m_int=1000;//最初の手持ちの資金(money_initial) int c;//勝ち負け差のカウント(count) c=0;//初期化 //乱数(時間による変化) srand((unsigned)time(NULL)); //ファイルの出力準備 FILE *sf; sf = fopen("simulation.dat","w");//出力するファイルの名前を指定 //エラー if(sf==NULL){ printf("ファイルオープンエラー\n"); return -1; } //初期条件の表示 printf("#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); fprintf(sf,"#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); double m_now;//現在の資金 double m_bet;//賭け金 //初期化 m_now=m_int;//最初は最初の手持ちの資金でスタート m_bet=20;//賭け金は資金の20でスタート for(i=1;i<=i_max;i++) { double r;//乱数(rand) r=100.0*rand()/(RAND_MAX+1.0);//0から100の乱数を出す printf("%d回目\t賭け金は%lf\t",i,m_bet); fprintf(sf,"%d回目\t賭け金は%lf\t",i,m_bet); if (p<=r){//負けの場合 m_now-=m_bet; m_bet+=1; c-=1; printf("lose\t"); fprintf(sf,"lose\t"); } else{//勝ちの場合 m_now +=m_bet*(w-1.0); m_bet-=1; c+=1; printf("win\t"); fprintf(sf,"win\t"); } printf("勝負差%d\t手持ちのお金は%lf\n",c,m_now); fprintf(sf,"勝負差%d\t手持ちのお金は%lf\n",c,m_now); if(m_bet==0){//賭け金が0になった場合、+1する m_bet+=1; } if(m_now<m_bet){//手持ちの金より賭けるお金が高い場合 printf("%d回目で手持ちのお金が足りません\n",i); fprintf(sf,"%d回目で手持ちのお金が足りません\n",i); break; } }//for(i)文の終わり //sfクローズ fclose(sf); return 0; }//プログラムの終わり |
プログラムで使用している変数の説明
※マーチンゲール法(2倍賭け)の破綻までのシミュレーションで紹介したプログラムと同じ変数の置き方をしている
i_max:勝負の回数
w:賭けたお金の戻る倍率を指定。ここでは2倍を指定
p:勝率を指定。ここでは1/2の確率なので50。
m_min:かけ金を指定
m_int:最初の資金を指定
※初期(initial)のスぺルを自分が勘違いしていたことに後から気が付いた。だが、プログラムと記事を今からすべて手直しするのはしんどいので、時間があったら、宣言する変数の名前をm=intからm_iniに書き替えたい。……文章を書いている人間の英語力の低さがばれて、地味に恥ずかしい。
※ここではm_min=1でm_int=1000と、最小の賭け金の1000倍を所持していると考えている。
例えば、最小の賭け金が1000円(千円)だとするなら、手元の軍資金は、1000000円(百万円)。割と現実的な設定だと思われる。
r:乱数(0~100の乱数)
※乱数rが勝率pより下の数で収まるなら勝ちの判定がでる。
そして、勝負を続けていくうちに、負け続けることもあるだろう。
そしてついに、賭けしようにも手持ちのお金が足りなくなるかもしれない。
この場合、これ以上勝負ができなくなり、プログラムは終了する。(破綻判定)
つまり、借金はNG
※マーチンゲール法になかった変数
c:トータルの勝ち負けの差がどのくらいあるか調べる用 。
10回勝負して6勝4負けなら+2 ←(+6−4)
10回勝負して3勝7負けなら−4 ←(+3−7)
実際にプログラムを走らせると以下のような結果となる
勝負回数i_maxは100000(10万回)までとする
※上限を設けない(2)のパターンの結果。最初の賭け金額は20でスタートする。
#倍率は2.000000 勝率は50.000000 最小の賭け金は1.000000 手持ちのお金は1000.000000
1回目 賭け金は20.000000 win 勝負差1 手持ちのお金は1020.000000
2回目 賭け金は19.000000 lose 勝負差0 手持ちのお金は1001.000000
3回目 賭け金は20.000000 win 勝負差1 手持ちのお金は1021.000000
(省略)
19522回目 賭け金は145.000000 lose 勝負差258 手持ちのお金は495.000000
19523回目 賭け金は146.000000 lose 勝負差257 手持ちのお金は349.000000
19524回目 賭け金は147.000000 lose 勝負差256 手持ちのお金は202.000000
19525回目 賭け金は148.000000 lose 勝負差255 手持ちのお金は54.000000
19525回目で手持ちのお金が足りません
この結果からわかるのは、上限を設けない場合だと、たとえ、負けの数より勝ちの数が多くても破綻することがある。(この場合、勝ちの回数が負けの回数より255多いのに、手持ちのお金が無くなっている)
上でも議論した通り、勝負を重ねていくと、(賭ける金額)=(最初にスタートする金額)-(これまでの勝敗差)という式から外れていく。
※srand((unsigned)time(NULL));の部分で時間を参照した上で乱数を発生させている。そのため、実行するタイミングで結果が変化する。
ダランベール法(上限なし)の期待値シミュレーション
上のプログラムを何度も走らせて期待値や破綻する率をもとめたい
そのためのプログラムは以下のようになる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> int main() { int k; int k_max=100000;//試行回数 int i=0; int i_max=100000;//勝負回数 double w=2.0; //賭け金の変換率(2倍以上)(win) double p=50; //勝率(50%以下)(probability) double m_min=1;//最小の賭け金額(money) double m_int=1000;//最初の手持ちの資金(money_initial) int b;//破たん回数のカウント(Bankruptcy) b=0;//初期化 int i_sum;//勝負回数の合計 double m_sum;//最終的なお金の合計 i_sum=0;//初期化 m_sum=0.0; int c_sum;//勝負差の合計 c_sum=0;//初期化 //乱数(時間による変化) srand((unsigned)time(NULL)); //ファイルの出力準備 FILE *sf; sf = fopen("simulation.dat","w");//出力するファイルの名前を指定 //エラー if(sf==NULL){ printf("ファイルオープンエラー\n"); return -1; } //初期条件の表示 printf("#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); fprintf(sf,"#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); for(k=1;k<=k_max;k++) { int i_cout;//勝負回数のカウント(スペルミスしてる) i_cout=0; double m_now;//現在の資金 double m_bet;//賭け金 //初期化 m_now=m_int;//最初は最初の手持ちの資金でスタート m_bet=20;//賭け金は資金の20でスタート int c;//勝ち負け差のカウント(count) c=0;//初期化 for(i=1;i<=i_max;i++) { double r;//乱数(rand) r=100.0*rand()/(RAND_MAX+1.0);//0から100の乱数を出す if (p<=r){//負けの場合 m_now-=m_bet; m_bet+=1; c-=1; } else{//勝ちの場合 m_now +=m_bet*(w-1.0); m_bet-=1; c+=1; } i_cout=i;//i_coutを定義しないと破たんしない(セーフ)場合、iと値が1ずれてしまうため if(m_bet==0){//賭け金が0になった場合、+1する m_bet+=1; } if(m_now<m_bet){//手持ちの金より賭けるお金が高い場合 break; } }//for(i)文の終わり if(i_cout<i_max) { printf("%d番目%d回目で破たん\t手持ちのお金は%lf\n",k,i_cout,m_now); fprintf(sf,"%d番目%d回目で破たん\t手持ちのお金は%lf\n",k,i_cout,m_now); b=b+1; } else{ printf("%d番目\t%d回目までセーフ\t手持ちのお金は%lf\n",k,i_cout,m_now); fprintf(sf,"%d番目\t%d回目までセーフ\t手持ちのお金は%lf\n",k,i_cout,m_now); } i_sum=i_sum+i_cout; m_sum=m_sum+m_now; c_sum=c_sum+c; }//for(k)文の終わり //破たん率 printf("勝負回数は%d\n",i_max); printf("試行回数は%d\n",k_max); printf("破たん回数は%d\n",b); fprintf(sf,"勝負回数は%d\n",i_max); fprintf(sf,"試行回数は%d\n",k_max); fprintf(sf,"破たん回数は%d\n",b); double b_pro= (double)b/(double)k_max*100.0;//(double)を抜くとb/k_maxがゼロと評価されてしまう printf("破たん率は%lf%\n",b_pro); fprintf(sf,"破たん率は%lf%\n",b_pro); double i_exp=(double)i_sum/(double)k_max; double m_exp=(double)m_sum/(double)k_max; printf("破たんするまでに行える勝負回数の期待値(i_exp)は%lf\n",i_exp); printf("破たんする直前で持っているお金の期待値(m_exp)は%lf\n",m_exp); fprintf(sf,"破たんするまでに行える勝負回数の期待値(i_exp)は%lf\n",i_exp); fprintf(sf,"破たんする直前で持っているお金の期待値(m_exp)は%lf\n",m_exp); double c_exp=(double)c_sum/(double)k_max; printf("破たんした時の勝負差の期待値は%lf\n",c_exp); fprintf(sf,"破たんした時の勝負差の期待値は%lf\n",c_exp); //sfクローズ fclose(sf); return 0; }//プログラムの終わり |
プログラムで使用している変数の説明
b_pro:破綻率
※ここでいう破綻率とは手持ちのお金が、賭けに耐えられない状況を意味する。借金してお金を用意することはできないとする。
i_exp: 破綻するまで何回勝負ができるかの期待値
m_exp: 勝負が終わった段階で持っているお金の期待値
k_max:試行回数。
※k_maxを大きくすればするほど、正確な期待値が求まる。
※マーチンゲール法になかった要素
c_exp:勝敗差の期待値
以下では、k_max=100000、i_max=100000で指定。
試行回数10万回、勝負回数10万回。
結果は以下のようになる
勝負回数は100000
試行回数は100000
破たん回数は97722
破たん率は97.722000%
破たんするまでに行える勝負回数の期待値(i_exp)は8778.653740
破たんする直前で持っているお金の期待値(m_exp)は1009.359560
破たんした時の勝負差の期待値は-0.283600
破綻率は97.72%。マーチンゲール法ほどではないが高い数字となっている。お金の期待値は1009となっており、初期の1000よりわずかに増えている。(ぶっちゃけ、誤差の範囲で、ダランベール法が儲かることの証明にはなっていない)
10万回勝負を行うと、ほとんどの場合がもとの1000を下回り、一部10万回勝負が続行できた場合は大きな資金を手にするといった結果となった。
ちなみに、賭け金額の上限を設けた場合は以下のような結果となる
※上限は、最初の賭け金額の2倍の40とした。
※オーバーフローする可能性もあったので、試行回数であるk_maxを10万回から2万回に減らしている。
※プログラムは一番したのページで紹介している
勝負回数は100000
試行回数は20000
破たん回数は17952
破たん率は89.760000%
破たんするまでに行える勝負回数の期待値(i_exp)は18883.871200
破たんする直前で持っているお金の期待値(m_exp)は983.052100
破たんした時の勝負差の期待値は-0.667800
上限を設けた分、破綻する率は97.72%から89.76%に少し落ちた。
書籍の紹介
『ギャンブルの必勝法が本当に儲かるかプログラミングで検証してみた』は以下の疑問にお答えします。
●勝率が50%の場合、利益を生み出す必勝法は存在するか?
●勝率が60%の場合、どのように賭けるのが最適か?
必勝法と思われている手法を15種類紹介します。必勝法には、例えば、マーチンゲール法(負けた時に2倍賭ける手法)などがあります。これらの手法が本当に儲かるかプログラミングを使用して検証します。また、検証するために必要なプログラミングの知識(C#)も紹介しています。
ギャンブルの必勝法が本当に儲かるかプログラミングで検証してみた
関連記事
※目次用の記事:ギャンブルの賭け方の種類をまとめてみた
参考
最後に、上限を設けたバージョンのプログラムを乗せておく。
1 2 3 |
if(m_bet>=40){//賭け金が40を超えたら、40にする(上限設定) m_bet=40; } |
ぶちゃけ、上のプログラムにこの記述を加えただけですが……
※賭ける金額の上限を40としている
ダランベール法(上限あり)の個別シミュレーション
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> int main() { int i=0; int i_max=100000;//勝負回数 double w=2.0; //賭け金の変換率(2倍以上)(win) double p=50; //勝率(50%以下)(probability) double m_min=1;//最小の賭け金額(money) double m_int=1000;//最初の手持ちの資金(money_initial) int c;//勝ち負け差のカウント(count) c=0;//初期化 //乱数(時間による変化) srand((unsigned)time(NULL)); //ファイルの出力準備 FILE *sf; sf = fopen("simulation.dat","w");//出力するファイルの名前を指定 //エラー if(sf==NULL){ printf("ファイルオープンエラー\n"); return -1; } //初期条件の表示 printf("#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); fprintf(sf,"#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); double m_now;//現在の資金 double m_bet;//賭け金 //初期化 m_now=m_int;//最初は最初の手持ちの資金でスタート m_bet=20;//賭け金は資金の20でスタート for(i=1;i<=i_max;i++) { double r;//乱数(rand) r=100.0*rand()/(RAND_MAX+1.0);//0から100の乱数を出す printf("%d回目\t賭け金は%lf\t",i,m_bet); fprintf(sf,"%d回目\t賭け金は%lf\t",i,m_bet); if (p<=r){//負けの場合 m_now-=m_bet; m_bet+=1; c-=1; printf("lose\t"); fprintf(sf,"lose\t"); } else{//勝ちの場合 m_now +=m_bet*(w-1.0); m_bet-=1; c+=1; printf("win\t"); fprintf(sf,"win\t"); } printf("勝負差%d\t手持ちのお金は%lf\n",c,m_now); fprintf(sf,"勝負差%d\t手持ちのお金は%lf\n",c,m_now); if(m_bet==0){//賭け金が0になった場合、+1する(下限設定) m_bet+=1; } if(m_bet>=40){//賭け金が40を超えたら、40にする(上限設定) m_bet=40; } if(m_now<m_bet){//手持ちの金より賭けるお金が高い場合 printf("%d回目で手持ちのお金が足りません\n",i); fprintf(sf,"%d回目で手持ちのお金が足りません\n",i); break; } }//for(i)文の終わり //sfクローズ fclose(sf); return 0; }//プログラムの終わり |
ダランベール法(上限あり)の期待値シミュレーション
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> int main() { int k; int k_max=20000;//試行回数 int i=0; int i_max=100000;//勝負回数 double w=2.0; //賭け金の変換率(2倍以上)(win) double p=50; //勝率(50%以下)(probability) double m_min=1;//最小の賭け金額(money) double m_int=1000;//最初の手持ちの資金(money_initial) int b;//破たん回数のカウント(Bankruptcy) b=0;//初期化 int i_sum;//勝負回数の合計 double m_sum;//最終的なお金の合計 i_sum=0;//初期化 m_sum=0.0; int c_sum;//勝負差の合計 c_sum=0;//初期化 //乱数(時間による変化) srand((unsigned)time(NULL)); //ファイルの出力準備 FILE *sf; sf = fopen("simulation.dat","w");//出力するファイルの名前を指定 //エラー if(sf==NULL){ printf("ファイルオープンエラー\n"); return -1; } //初期条件の表示 printf("#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); fprintf(sf,"#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); for(k=1;k<=k_max;k++) { int i_cout;//勝負回数のカウント(スペルミスしている) i_cout=0; double m_now;//現在の資金 double m_bet;//賭け金 //初期化 m_now=m_int;//最初は最初の手持ちの資金でスタート m_bet=20;//賭け金は資金の20でスタート int c;//勝ち負け差のカウント(count) c=0;//初期化 for(i=1;i<=i_max;i++) { double r;//乱数(rand) r=100.0*rand()/(RAND_MAX+1.0);//0から100の乱数を出す if (p<=r){//負けの場合 m_now-=m_bet; m_bet+=1; c-=1; } else{//勝ちの場合 m_now +=m_bet*(w-1.0); m_bet-=1; c+=1; } i_cout=i;//i_coutを定義しないと破たんしない(セーフ)場合、iと値が1ずれてしまうため if(m_bet==0){//賭け金が0になった場合、+1する(下限設定) m_bet+=1; } if(m_bet>=40){//賭け金が40を超えたら、40にする(上限設定) m_bet=40; } if(m_now<m_bet){//手持ちの金より賭けるお金が高い場合 break; } }//for(i)文の終わり if(i_cout<i_max) { printf("%d番目%d回目で破たん\t手持ちのお金は%lf\n",k,i_cout,m_now); fprintf(sf,"%d番目%d回目で破たん\t手持ちのお金は%lf\n",k,i_cout,m_now); b=b+1; } else{ printf("%d番目\t%d回目までセーフ\t手持ちのお金は%lf\n",k,i_cout,m_now); fprintf(sf,"%d番目\t%d回目までセーフ\t手持ちのお金は%lf\n",k,i_cout,m_now); } i_sum=i_sum+i_cout; m_sum=m_sum+m_now; c_sum=c_sum+c; }//for(k)文の終わり //破たん率 printf("勝負回数は%d\n",i_max); printf("試行回数は%d\n",k_max); printf("破たん回数は%d\n",b); fprintf(sf,"勝負回数は%d\n",i_max); fprintf(sf,"試行回数は%d\n",k_max); fprintf(sf,"破たん回数は%d\n",b); double b_pro= (double)b/(double)k_max*100.0;//(double)を抜くとb/k_maxがゼロと評価されてしまう printf("破たん率は%lf%\n",b_pro); fprintf(sf,"破たん率は%lf%\n",b_pro); double i_exp=(double)i_sum/(double)k_max; double m_exp=(double)m_sum/(double)k_max; printf("破たんするまでに行える勝負回数の期待値(i_exp)は%lf\n",i_exp); printf("破たんする直前で持っているお金の期待値(m_exp)は%lf\n",m_exp); fprintf(sf,"破たんするまでに行える勝負回数の期待値(i_exp)は%lf\n",i_exp); fprintf(sf,"破たんする直前で持っているお金の期待値(m_exp)は%lf\n",m_exp); double c_exp=(double)c_sum/(double)k_max; printf("破たんした時の勝負差の期待値は%lf\n",c_exp); fprintf(sf,"破たんした時の勝負差の期待値は%lf\n",c_exp); //sfクローズ fclose(sf); return 0; }//プログラムの終わり |
~Webサイトを自分で作ってみませんか?~
Webサイトを運営するにはサーバーが必須です。
このサイトは、エックスサーバー のサーバーを使用しています。
エックスサーバーは無料で10日間お試しができます。
軍資金100万円って書いてあるのに1000ドルになってません?
今回の記事では、最小単位を1000円(千円)と考えて、その1000倍の100万円持っているという仮定で考えています。
もしも最小単位を1ドルと解釈するならその1000倍の1000ドル持っていると考えて問題ないです。
キロ計算だったのですね。
失礼いたしました。
こんにちわ。
記事を大変興味深く拝見いたしました。
今私が取り組んでいるカジノの案件で自信のロジックの成果を検証したくエクセルで関数を使いながら試行錯誤しております。
逆ダランベール法を少し改良したロジックなのですが、検証のためのプログラミングが出来ずに困っています。
アドバイスしていただくことは可能でしょうか?