確率のシミュレーション
2025.08.17
中学生の頃に一時ハマったのは、確率のシミュレーション
サイコロを転がして、ある目が出る確率というもので、何の仕込みもない正常なサイコロならどの目でも同じはず。
相対度数って言ったっけ。0.1666・・・になる。(1/6)
サイコロを振る回数が増えるほど、1/6に近づいていく、ということをシミュレーションしました。
MSXの乱数で1~6を発生させ、1から6の目それぞれ何回出たか集計させる単純なプログラムです。
最初は、いまでも自分で賢くないと思うけど、
IF X=1 THEN K1=K1+1
IF X=2 THEN K2=K2+1
IF X=3 THEN K3=K3+1
IF X=4 THEN K4=K4+1
IF X=5 THEN K5=K5+1
IF X=6 THEN K6=K6+1
・・・と、バカ正直にIFを並べていました。
もしIFで処理するとしても、最後にGOTOで以後のIFをとばしてやれば少しは速くなったでしょう。K1=K1+1:GOTO 200 とか。
あとで気づいて、IF文を並べるんじゃなくて
K(X)=K(X)+1
とすれば1行で済むじゃないかと。
最初は、こんなものでした。
あとから、中間結果を表示(印刷)するようにしました。
たとえば1000回ごとの結果を見たり記録に残したいわけです。
メインループの処理にできるだけ影響しないように、単純に判定する必要がありました。
MODを使ったのか\を使ったのかもう忘れました。
カウントの変数を別に回して1000回で0に戻すついでに印刷じゃなくて、
上記のXの値を1000で割って、割り切れるかどうかで判断したと思います。どっちが速いかわからないけど、まあ、放置しておけばそのうち終わる。
いま動いているのか、いまは何回サイコロをふったか、という表示もする必要がありました。そうでないと進捗がわからない。
サイコロを転がして、ある目が出る確率というもので、何の仕込みもない正常なサイコロならどの目でも同じはず。
相対度数って言ったっけ。0.1666・・・になる。(1/6)
サイコロを振る回数が増えるほど、1/6に近づいていく、ということをシミュレーションしました。
MSXの乱数で1~6を発生させ、1から6の目それぞれ何回出たか集計させる単純なプログラムです。
最初は、いまでも自分で賢くないと思うけど、
IF X=1 THEN K1=K1+1
IF X=2 THEN K2=K2+1
IF X=3 THEN K3=K3+1
IF X=4 THEN K4=K4+1
IF X=5 THEN K5=K5+1
IF X=6 THEN K6=K6+1
・・・と、バカ正直にIFを並べていました。
もしIFで処理するとしても、最後にGOTOで以後のIFをとばしてやれば少しは速くなったでしょう。K1=K1+1:GOTO 200 とか。
あとで気づいて、IF文を並べるんじゃなくて
K(X)=K(X)+1
とすれば1行で済むじゃないかと。
最初は、こんなものでした。
あとから、中間結果を表示(印刷)するようにしました。
たとえば1000回ごとの結果を見たり記録に残したいわけです。
メインループの処理にできるだけ影響しないように、単純に判定する必要がありました。
MODを使ったのか\を使ったのかもう忘れました。
カウントの変数を別に回して1000回で0に戻すついでに印刷じゃなくて、
上記のXの値を1000で割って、割り切れるかどうかで判断したと思います。どっちが速いかわからないけど、まあ、放置しておけばそのうち終わる。
いま動いているのか、いまは何回サイコロをふったか、という表示もする必要がありました。そうでないと進捗がわからない。
トラックバックURL
トラックバック一覧
コメント一覧
コメント投稿