![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
すみません。質問があります。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- Visual Basic(VBA) 乱数の表示 4 2022/10/12 10:43
- Visual Basic(VBA) VBA 変数が思うように機能しません。ご教授願います。 7 2022/08/14 13:50
- Visual Basic(VBA) VBAプログラミング 4 2023/01/14 00:38
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Java Java 石取りゲーム 3 2023/02/02 15:46
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(ゲーム) ポケモン乱数 色違い 伝説 HGSS(ハートゴールド・ソウルシルバー) 1 2022/05/06 13:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゲームの開発言語(1980~2010年)
-
ポトリスのようなゲームを作り...
-
Unityでブラックジャックゲーム
-
ゲームプログラムを組むのに必...
-
Now Loadingについて
-
物理エンジンの自作はできるの...
-
ノベルゲームを作ろうとおもっ...
-
abnormal program termination
-
C言語、C+、C++、C#の違い
-
プログラミングでArduinoのc++...
-
自営業でも実務経験に入る?
-
UNITY Float型の接尾辞fって
-
プログラムに書かれる"%"記号の...
-
プログラムを作れる様になるに...
-
自作ソフトウェアの販売方法
-
VBSとWSHは読み方が違うだけで...
-
HOLONついて教えてください。
-
VBScriptで引数を省略したい場合
-
swift言語の最適化 swift最適化...
-
どのプログラミング言語で作ら...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FLASHでゲームを作っていた人は...
-
ニンテンドーDSのソフト作成に...
-
ゲームの開発言語(1980~2010年)
-
フリーゲームを解析したい
-
processingの質問です。
-
Now Loadingについて
-
ノベルゲームを作ろうとおもっ...
-
abnormal program termination
-
C言語で簡単なゲームを作る方法
-
携帯ゲーム機のソフトを作る方法
-
作成したゲームに制限時間を表...
-
ゲームプログラミング学習法
-
ゲームのソースコードを解析し...
-
一番簡単にトランプゲームを作...
-
ゲームプログラマーはゲームが...
-
高校に入ったら独学でプログラ...
-
ゲームを作るときに必要なプロ...
-
ノベルゲームを作りたいのです...
-
乱数について(Rnd関数)
-
ゲームプログラマーについて
おすすめ情報