
すみません。質問があります。
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を探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゲームの開発言語(1980~2010年)
-
C#でゲームのチートを作ること...
-
フリーゲームを解析したい
-
プログラムからアイコンファイ...
-
どのソフトでHPを作っているか...
-
C言語、C+、C++、C#の違い
-
ノートPCについて 大学・専門へ...
-
UNITY Float型の接尾辞fって
-
ど素人です。7セグメント表示の...
-
.Net Framework APIがあればMFC...
-
COBOLでのNOT = の AND条件
-
Excel VBAで文字化けする (英語...
-
リピート再生が出来ません
-
プログラミング言語「C#」の難...
-
VBA フォルダ アクセス権限付与
-
Excelの開発言語ってなんですか?
-
階乗の記号 ^
-
プログラムに書かれる"%"記号の...
-
C言語とhtmlの違いを どな...
-
アセンブリ名とは??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ニンテンドーDSのソフト作成に...
-
フリーゲームを解析したい
-
ゲームの開発言語(1980~2010年)
-
ゲームのソースコードを解析し...
-
ゲームのプログラム作成
-
abnormal program termination
-
ゲームを日本語化しようとする...
-
VisualC++でアニメーションgif...
-
ノベルゲームを作ろうとおもっ...
-
建物を3Dで内部まで再現してゲ...
-
プログラミング初心者がゲーム...
-
プログラミング言語の覚え方
-
シーケンス制御を用いたゲーム...
-
Now Loadingについて
-
ゲームプログラマについて
-
画像を差し替えるだけでオリジ...
-
プログラミング初心者が商業レ...
-
ゲームプログラミングの本を探...
-
ゲーム開発の入門書を探しています
-
Linuxでのゲームプログラミング...
おすすめ情報