• ベストアンサー

ランダム関数の物理的な仕組み

ハードウェアのところで質問しようと思いましたが、 サーバと書いてあったので、こちらにしました。 プログラミングにはランダム関数というものが、必ず(とは言えないかもしれませんが)あると思います。しかし、この内部構造はどうなっているのでしょうか。 PC内部が電圧で振り分けられて、スイッチがONになったりOFFになったり、もしくは0と1の世界…といった表現で説明されていますが、そういった事は意味は多少わかっているつもりです。 ランダム関数は、数値を適当に返してくるわけですが、この適当なデータをどのように、内部的物理的に発生させているのでしょうか。 ゲームなどでは必需品の仕組みですが…簡単に説明していただけないでしょうか。検索しても物理的なことを説明しているWebページは、案の定見つかりませんでした。 わかる方がいましたら、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • drmoreau
  • ベストアンサー率41% (33/79)
回答No.1

ランダム関数はハード的に存在しているものではなく、ソフト的なものです。ランダム関数は各々のプログラム言語のライブラリのなかにあります。関数を使って擬似的に乱数を生成しています。自然現象のように本当の意味でランダムなものではありません。

adaypajimy
質問者

お礼

ありがとうございました。 そのようにできているとは知りませんでした。

その他の回答 (5)

回答No.6

ハードの乱数といえば、昔よく使われていたZ80というCPUには、Rレジスタというメモリのリフレッシュカウンタ用のレジスタがあって、この値を乱数に使ったりしていました。 また、シミュレーションや暗号で擬似乱数ではなくて本当の乱数が欲しいときは、乱数発生ICを使うこともあります。これは、半導体内部で生じる熱雑音を利用しています。

adaypajimy
質問者

お礼

ありがとうございました。 私は、何か電気の周波数で乱数をおこしているのかと思いましたが…一応ハードでもあるんですね。こんなに奥が深い世界だったとは…。

  • urakarin
  • ベストアンサー率0% (0/5)
回答No.5

擬似乱数といえば、メルセンヌ・ツイスターではないでしょうか。 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html

参考URL:
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html
adaypajimy
質問者

お礼

ありがとうございました。 なにやら精度が高いらしいですね。 研究されているとは驚きです。 結構、おもしろい世界ですね。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.4

色々方法はありますが次のような擬似乱数がよく使われます。 混合合同法(mixed congruential method) 下の式に適当な a、p、q を代入する(必要な桁数が採れれば何でも良い)。 求まった a' の中間あたりの必要な桁数を乱数として採用し、それを新たな a として、 再び下の式に代入する。 ap + q = a' (例)5 桁の擬似乱数を作ってみる。ただし、最初は a = 14992、p = 673、q = 944とし、求まった a' の、十の位から十万の位までを採用することとする。 14992×673+944 = 10090560 → 09056 09056×673+944 = 06095632 → 09563 09563×673+944 = 06436843 → 43684 43684×673+944 = 29400276 → 40027 40027×673+944 = 26939115 → 93911 … こうして、擬似乱数列 {14992, 9056, 9563, 43684, 40027, 93911, …} を得る。

参考URL:
http://ja.wikipedia.org/wiki/%E7%96%91%E4%BC%BC%E4%B9%B1%E6%95%B0
adaypajimy
質問者

お礼

ありがとうございました。 なんか、難しいですが…乱数表をつくりはじめるわけですね…。アルゴリズムなども研究されているのですね。

回答No.3

No.1さんが言っている通り、ランダム関数が返してくる数字は、内部にある乱数表を参照しています。 ですから、プログラムの作り方(ランダム関数の呼び出すタイミング)によってはプログラムを実行する度に同じ数字を返してきます。 勿論、これに関しても参照できる乱数表が何パターンか用意されており、参照するパターンを変更する事で返してくる数字を変更出来る様になってます。

adaypajimy
質問者

お礼

ありがとうございました。 そんな単純な仕組みだとは思いませんでした。

回答No.2

コンピュータは0,1で判断するので、 乱数も計算で求められていると思いますよ。 詳しいHPは見つかりませんでしたが、疑似乱数と いう概念です。 だから、物理的には、普通の計算と変わらないか、と。 計算で乱数表を作って、それに従って数値を打ち出し てるんだと思います。 ただ、本当の乱数というのは、けっこう難しく 昔、エクセルで0~9までの10000個の乱数を作り、 平均したりそれぞれの数を数えたりもしましたが、 けっこうばらつきがありました。 3.14・・・・・・の計算からも、いい乱数ができる みたいです。

参考URL:
http://homepage3.nifty.com/mmgames/c_guide/22.html#S1
adaypajimy
質問者

お礼

ありがとうございました。 ゲームプログラミングを考えると、 結構致命的な問題ですね。 私も実験してみるかもしれません。