DOBON.NET DOBON.NETプログラミング掲示板過去ログ

乱数はPCスペックで異なる?

環境/言語:[Win XP Framework 2.0 VB]
分類:[.NET]

こんにちは。

ここで質問しても良いのかわかりませんが、もし不快にさせてしまったらすみません。

今回聞きたい事があります。
乱数を利用したちょっとしたゲーム(スロット系)を作ろうと思っていますが、この乱数は「CPU、ROM、RAM、HD、グラボ等」により抽選率が変わるという事はあるのでしょうか?

上記の症状により大当たりしやすくなるやその逆で当たりにくくなるといった事などです。
■No25593に返信(VBハンターさんの記事)
> こんにちは。
>
> ここで質問しても良いのかわかりませんが、もし不快にさせてしまったらすみません。
>
> 今回聞きたい事があります。
> 乱数を利用したちょっとしたゲーム(スロット系)を作ろうと思っていますが、この乱数は「CPU、ROM、RAM、HD、グラボ等」により抽選率が変わるという事はあるのでしょうか?
>
> 上記の症状により大当たりしやすくなるやその逆で当たりにくくなるといった事などです。

そうなるように、ハードウェア情報を取得して、乱数結果に対して値の操作をすれば出来るかもしれませんが・・・
さて、乱数って何?ということを考えると、「そんなこと無い」って言うのを理解できると思います。
■No25593に返信(VBハンターさんの記事)
> 乱数を利用したちょっとしたゲーム(スロット系)を作ろうと思っていますが、この乱数は「CPU、ROM、RAM、HD、グラボ等」により抽選率が変わるという事はあるのでしょうか?

乱数生成ハードウェアを用いる場合、そういう可能性はあるかも知れませんが、
通常、気にするレベルでは無いはずです。

# 乱数生成器を備えた CPU の例。
# http://pc.watch.impress.co.jp/docs/2003/1016/mpf03.htm

ハードウェア乱数生成器は通常、できるだけ偏りが少なくなるように設計されているからです。
http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E4%B9%B1%E6%95%B0%E7%94%9F%E6%88%90%E5%99%A8


また、VB 等で普段使用される乱数については、内部的にシード値を使って
計算で求めるタイプの擬似乱数列となります。こちらはハードウェアには依存しません。
ただし、結果はやや規則的となるため、シード値が重要になってきます。
http://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC%E4%B9%B1%E6%95%B0



いずれにせよ、たとえ完全なる乱数生成器があったとしても、乱数を扱うプログラム側の
実装ミスによって、抽選率に偏りが生じる事があるかと思います。とはいえ、そうしたバグが
> 「CPU、ROM、RAM、HD、グラボ等」により抽選率が変わる
という状況を生み出すかどうかと問われれば、一般的回答としては『否』だと思います。



ところで、どの乱数生成器を使おうとしていますか?
VB の Rnd 関数? System.Random クラス?
System.Security.Cryptography.RNGCryptoServiceProvider クラス?
あるいは、乱数生成アルゴリズムから自作しようとしておられるのでしょうか?

Rnd関数(と Randomize ステートメント)については、線形合同式法の
乱数発生器である事が知られており、結果を予測できる可能性があります。
http://japan.internet.com/developer/20060124/26.html

また、Random.NextByte などでは、下記のような話もあります。
http://bbs.wankuma.com/index.cgi?mode=one&namber=7211&KLOG=18

なお、RNGCryptoServiceProvider は、上記よりも精度が高くなります。
http://www.atmarkit.co.jp/fdotnet/dotnettips/035random/random.html
こんにちは。

> そうなるように、ハードウェア情報を取得して、乱数結果に対して値の操作をすれば出来るかもしれませんが・・・
> さて、乱数って何?ということを考えると、「そんなこと無い」って言うのを理解できると思います。

やはりそうですよね。
ちょっと気になったのでどうなのかなと思いまして。
素早い回答ありがとう御座いました。
こんにちは。

> 乱数生成ハードウェアを用いる場合、そういう可能性はあるかも知れませんが、
> 通常、気にするレベルでは無いはずです。

それを聞いて一安心しました。

> いずれにせよ、たとえ完全なる乱数生成器があったとしても、乱数を扱うプログラム側の
> 実装ミスによって、抽選率に偏りが生じる事があるかと思います。

つまりは制作側の乱数テーブルなどによる偏りが生じる可能性はあるという事ですよね。この偏りがハードに関係する物ではないのですね。

> ところで、どの乱数生成器を使おうとしていますか?
> VB の Rnd 関数? System.Random クラス?
> System.Security.Cryptography.RNGCryptoServiceProvider クラス?
> あるいは、乱数生成アルゴリズムから自作しようとしておられるのでしょうか?

System.Random クラスを使用して、完全確率タイプの抽選方式にします。
と、いうか一言で乱数といっても色々あるのですね。
参考になるURLもありがとう御座いました。

助かりました。
またわからない事があった時に質問するかも知れませんがよろしく御願い致します。
解決にチェック入れるの忘れてました。
お騒がせしてすみません。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板