アプリ版:「スタンプのみでお礼する」機能のリリースについて

ハードウェアのところで質問しようと思いましたが、
サーバと書いてあったので、こちらにしました。

プログラミングにはランダム関数というものが、必ず(とは言えないかもしれませんが)あると思います。しかし、この内部構造はどうなっているのでしょうか。

PC内部が電圧で振り分けられて、スイッチがONになったりOFFになったり、もしくは0と1の世界…といった表現で説明されていますが、そういった事は意味は多少わかっているつもりです。

ランダム関数は、数値を適当に返してくるわけですが、この適当なデータをどのように、内部的物理的に発生させているのでしょうか。
ゲームなどでは必需品の仕組みですが…簡単に説明していただけないでしょうか。検索しても物理的なことを説明しているWebページは、案の定見つかりませんでした。

わかる方がいましたら、よろしくお願いします。

A 回答 (6件)

ランダム関数はハード的に存在しているものではなく、ソフト的なものです。

ランダム関数は各々のプログラム言語のライブラリのなかにあります。関数を使って擬似的に乱数を生成しています。自然現象のように本当の意味でランダムなものではありません。
    • good
    • 1
この回答へのお礼

ありがとうございました。

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

お礼日時:2005/03/15 00:34

ハードの乱数といえば、昔よく使われていたZ80というCPUには、Rレジスタというメモリのリフレッシュカウンタ用のレジスタがあって、この値を乱数に使ったりしていました。


また、シミュレーションや暗号で擬似乱数ではなくて本当の乱数が欲しいときは、乱数発生ICを使うこともあります。これは、半導体内部で生じる熱雑音を利用しています。
    • good
    • 0
この回答へのお礼

ありがとうございました。

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

お礼日時:2005/03/15 00:41

擬似乱数といえば、メルセンヌ・ツイスターではないでしょうか。



http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ …

参考URL:http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ …
    • good
    • 0
この回答へのお礼

ありがとうございました。

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

お礼日時:2005/03/15 00:39

色々方法はありますが次のような擬似乱数がよく使われます。



混合合同法(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% …
    • good
    • 0
この回答へのお礼

ありがとうございました。

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

お礼日時:2005/03/15 00:38

No.1さんが言っている通り、ランダム関数が返してくる数字は、内部にある乱数表を参照しています。

 ですから、プログラムの作り方(ランダム関数の呼び出すタイミング)によってはプログラムを実行する度に同じ数字を返してきます。

勿論、これに関しても参照できる乱数表が何パターンか用意されており、参照するパターンを変更する事で返してくる数字を変更出来る様になってます。
    • good
    • 0
この回答へのお礼

ありがとうございました。

そんな単純な仕組みだとは思いませんでした。

お礼日時:2005/03/15 00:36

コンピュータは0,1で判断するので、


乱数も計算で求められていると思いますよ。
詳しいHPは見つかりませんでしたが、疑似乱数と
いう概念です。
だから、物理的には、普通の計算と変わらないか、と。

計算で乱数表を作って、それに従って数値を打ち出し
てるんだと思います。
ただ、本当の乱数というのは、けっこう難しく
昔、エクセルで0~9までの10000個の乱数を作り、
平均したりそれぞれの数を数えたりもしましたが、
けっこうばらつきがありました。

3.14・・・・・・の計算からも、いい乱数ができる
みたいです。

参考URL:http://homepage3.nifty.com/mmgames/c_guide/22.ht …
    • good
    • 0
この回答へのお礼

ありがとうございました。

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

お礼日時:2005/03/15 00:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!