
すみません。質問があります。
VBAを用いてパチスロシミュレータを作成しているのですが
乱数が偏っている気がしてなりません。
乱数はRnd関数を用いて0~65535の範囲で生成しています。
もちろん初期化時にRandomizeも用いています。
毎ゲーム開始時にそのゲームで必要な乱数を4つ
r1 = Int(Rnd() * 65536)
r2 = Int(Rnd() * 65536)
r3 = Int(Rnd() * 65536)
r4 = Int(Rnd() * 65536)
というように生成しています。
それらの乱数を用いて複雑なモード移行などを行っているのですが、
ある条件下でr1のあるビットが1になりやすいというような現象が起こります。
乱数に法則性があることは不思議ではないんですが、Rnd関数による乱数っていうのは多少複雑な処理をしただけでこのような不具合が出る可能性があるのでしょうか。
私のプログラムに問題があるとは思うのですが、「もしかして、乱数のせいかも?」という疑念を抱いてデバッグするのはつらいものがあるので。
ですので、
・変な使い方をすれば目に見えて偏る可能性もある。
という意見の方はその「変な使い方」というのを具体的に教えていただけないでしょうか?
また、そのような意見の方がしばらくいらっしゃらない場合はRnd関数による乱数は実用上問題なく使えると解釈したいと思います。
よろしくおねがいします。
No.2ベストアンサー
- 回答日時:
VBAに限らず言語処理系の標準ライブラリなどで用意している乱数は往々にしてお粗末なものです。
だいたいが線形合同法を使っているので、下位ビットだけ取るなどの使い方をすれば簡単に法則性が出てしまいます。
品質の良い乱数アルゴリズムとしてはメルセンヌ・ツイスタが知られていますが、VBAで使うには重いでしょう。
ゲームの種くらいならRndでもそこそこ使えると思います。
下位ビットだけ使ったり余りに長い系列を使ったりという悪い使い方をしないというのが前提になりますけど。
参考URL:http://www001.upp.so-net.ne.jp/isaku/rand.html
ありがとうございます。
各乱数の取得時に違う乱数系列を使用すればとりあえずうまくいきました。
r1 = Int(Rnd() * 65536)
r2 = Int(Rnd() * 65536)
r3 = Int(Rnd() * 65536)
r4 = Int(Rnd() * 65536)
↓
r1 = Int(RndUser1() * 65536)
r2 = Int(RndUser2() * 65536)
r3 = Int(RndUser3() * 65536)
r4 = Int(RndUser4() * 65536)
モンテカルロ法では乱数がしっかり機能するのかも考慮しなければいけないんですね。
これからも不安です。
お二人ともありがとうございました。
No.1
- 回答日時:
すみません、あまり読んでませんが。
「VB Rnd function precise」で検索
http://www.15seconds.com/issue/051110.htm
「VB 乱数 精度」でもいけるかも。日本語訳あったし
http://japan.internet.com/developer/20060124/26. …
似たような症状を聞いたことがあったので「線形合同式法 カルドセプトサーガ」で検索
http://forzaxbox360.blog56.fc2.com/blog-category …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ノベルゲームを作ろうとおもっ...
-
プログラマーは誘惑にさらされ...
-
C言語、C+、C++、C#の違い
-
リピート再生が出来ません
-
COBOLでのNOT = の AND条件
-
C言語とhtmlの違いを どな...
-
VBScriptで引数を省略したい場合
-
プログラムに書かれる"%"記号の...
-
vbaとc言語の関連性について
-
「~言語で記述する」という英...
-
Excel VBAで文字化けする (英語...
-
「VB」と「VB.NET」の違いについて
-
プログラムははぜ小文字大文字...
-
プログラムからアイコンファイ...
-
数学、プログラミング、物理、...
-
パスカルケースの由来。
-
PL/Iについて
-
窓の杜やベクターのフリーソフ...
-
ノートPCについて 大学・専門へ...
-
VB 1対1の簡単なチャットプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ニンテンドーDSのソフト作成に...
-
ノベルゲームを作ろうとおもっ...
-
フリーゲームを解析したい
-
C#でのゲーム作成について
-
将来、ゲーム業界に就職してみ...
-
JAVAで入門書の後に
-
ゲームを日本語化しようとする...
-
C言語始めようと思っています
-
ゲームの開発言語(1980~2010年)
-
Now Loadingについて
-
HSPのソース
-
C言語・ゲーム作成で挫折気味の...
-
Cでゲーム
-
超絶初心者なのですが…
-
このゲームって楽しいと思いま...
-
abnormal program termination
-
processingの質問です。
-
C、C++でもぐらたたき
-
linux+x での高速の画像描画
-
ゲームやSNS プログラミング!
おすすめ情報