すみません。質問があります。
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.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 …
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)
モンテカルロ法では乱数がしっかり機能するのかも考慮しなければいけないんですね。
これからも不安です。
お二人ともありがとうございました。
お探しの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ランキング
-
ニンテンドーDSのソフト作成に...
-
C、C++でもぐらたたき
-
javaでゲームを作りたいです。...
-
乱数について(Rnd関数)
-
ゲームを作ってホームページに...
-
ゲームやSNS プログラミング!
-
ノベルゲームを作ろうとおもっ...
-
高校生むけC++参考書
-
ゲームプログミングと数学
-
Win32APIのゲームやアニメーシ...
-
ゲームを作るのが趣味
-
フリーゲームを解析したい
-
Now Loadingについて
-
JavaSprictの解説などについて
-
Linux Cプログラミングを学ぶた...
-
C言語、C+、C++、C#の違い
-
COBOLでのNOT = の AND条件
-
C++ ってなんて読む?
-
Visual Studio Codeについて
-
HOLONついて教えてください。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ニンテンドーDSのソフト作成に...
-
ゲームの開発言語(1980~2010年)
-
フリーゲームを解析したい
-
C言語で簡単なゲームを作る方法
-
C#でゲームのチートを作ること...
-
ノベルゲームを作ろうとおもっ...
-
Now Loadingについて
-
物理演算エンジンをつくる会社...
-
ゲームを日本語化しようとする...
-
C#で音楽の2曲同時再生の仕方
-
HSPでネット通信はできるの?
-
ゲームプログラマーとシステム...
-
格闘ゲーム製作ツールもしくは言語
-
高校生むけC++参考書
-
ゲームプログラムを組むのに必...
-
C言語でのsleep機能について
-
abnormal program termination
-
ジョイパッドの状態を読み込む...
-
C++はWindows運用に必須なのか
-
C、C++でもぐらたたき
おすすめ情報