• ベストアンサー

コンピュータによる乱数発生について

コンピュータで乱数を発生させる時に常に何らかのパターンが現れてしまって決して完全にランダムには成って呉れないことを証明した文献をお教え下さい。

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

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.5

「完全にランダム」をどう定義するかにもよると思いますが。 計算で作れる「擬似乱数」については、アルゴリズムとある時点での内部状態とが分かっていれば後の系列は計算できるので、規則性も再現性もない「真の乱数」ではあり得ないですね。 ただコンピュータで発生させるとしても、放射性源や熱雑音など物理的な装置により発生させるものもあるので、そういうものについては「完全にランデム」でないと証明することはできないでしょう。

kimko379
質問者

お礼

御丁寧な御回答、誠に有難う御座いました。

kimko379
質問者

補足

乱数を「放射性源や熱雑音など[・・・]により発生させる」方法を述べた文献をお教え下さいますでしょうか。

その他の回答 (5)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.6

分かりやすい文献は知りません。 熱雑音を利用したハードウェア乱数生成器の詳細な理論は知りません。 ただ、下記URLによると、最近のパソコンならチップセットで熱雑音を使った真の乱数が提供されているようです。自作に拘るのでなければ利用には困らないでしょう。 # http://linuxjf.sourceforge.jp/JFdocs/kernel-docs-2.6/hw_random.txt.html なお、ハードウェア乱数生成器は市販されている製品もあります。真の乱数を大量に必要とするなら下記URLのような製品を購入することも選択肢になります。 # http://www.argocorp.com/compo/IDQ/IDQ.html 放射線源を使う方法は、適当な放射線源をガイガーカウンタで計測して、その計測値を使うものです。この確率分布はポワソン分布になると思いますが、分布を変換して一様分布にして使えば良いことになります。

kimko379
質問者

お礼

御丁寧な御回答を、誠に有難う御座いました。

  • Ishiwara
  • ベストアンサー率24% (462/1914)
回答No.4

証明するまでもなく、一義的に答が出るプロセスを使う以上、完全にランダムとは言えません。実用上の問題は、その乱数を何に使うのかによって、どの程度のランダム性が必要になるかということです。 完全に近いランダム性を要求するならば、ハードウエア(例えば雑音発生器)と組み合わせる方法があります。

kimko379
質問者

お礼

誠に有難う御座いました。

kimko379
質問者

補足

ハードウェアと組み合わせても完全ではないのでしょうか。その事を示す文献はありますでしょうか。

  • kuni-chan
  • ベストアンサー率22% (674/3053)
回答No.3

 疑似乱数を発生させる方法はいくつかありますが、それぞれに周期がある事は解説されていると思います。  確率統計に関する本の中に見つける事ができるはずです。

kimko379
質問者

お礼

御丁寧な御回答、誠に有難う御座いました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

いや, そんな証明は無理だろ.

kimko379
質問者

お礼

有難う御座いました。

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

コンピュータで作る乱数を「疑似乱数」といいます。 証明した文献と言うか……「コンピューターで作れる」=「真の乱数ではない」のですよね。「計算によって算出している」わけですから。 まぁ、Wikipediaで「疑似乱数」を調べていただければ。

kimko379
質問者

お礼

御丁寧な御回答、誠に有難う御座いました。

関連するQ&A

  • 乱数発生ルーチンの使い方について

    数値計算において一様乱数を発生させるルーチンがいろいろあります。ソースが公開されているものやコンパイラが提供したりするものです。それらを利用する場合、乱数発生のシーズ(種)を与えてそれに応じて動作するというものが多いだろうと思います。そこで質問ですが、10000個の乱数を1回発生させる場合と100個の乱数を100回発生させる場合とで乱数の感じがかなり違います。いずれの場合も100×100の2次元データ(エクセルのシート状)として出力して作図したらその違いが簡単に分かります。この違いの原因はシーズの与え方が1回と100回という違いだろうと思います。100回のシーズの与え方にパターンが出来てしまうからだと思われます。例えば時間を使ってシーズを与えなおすことも考えられますが、今時のPCだとあっという間なのでシーズが同じだから、同じ乱数が100個できてしまいます。乱数を繰り返し発生させるときにその繰り返しの中でパターン化された乱数にならないように発生させる方法がないでしょうか。シーズが要らない乱数生成ルーチンとかですが。あるいはシーズをランダムに取得する方法が含まれたルーチン(シーズがないように見える)などです。あるいは本当にないものなど。メルセンヌツイスターはどうなのでしょうか。一応、フォートランでの利用を考えていますが、言語依存の問題ではないかもと思いますが。 よろしくお願いします。

  • 乱数の発生の仕方教えてください

    javaで乱数の発生の方法がいまいちわかりません。 import java.util.*;で Randomクラスを使うというところまではわかるのですが、実際にソースでの乱数の発生の仕方がわからないので教えてもらえないでしょうか?

  • 乱数を10個発生させ、それをrandom.txtとして書き出し・・・

     質問は乱数を10個発生させ、それをrandom.txtとして書き出しrandom.txtを読み込み、小さい順に並べ替えてorder.txtとして書き出すというものです。乱数の発生のさせ方は質問集を見て分かったのですが、その後がさっぱり分かりません。今までできる限りは質問集を見たり、質問をして参考にして自分で取り組んだのですが、このことに関しては全く分かりません。丸投げ状態で申し訳ないのですが分かりやすく説明していただけるでしょうか。

    • ベストアンサー
    • Java
  • fortran77で乱数を発生させたい

    fortran77で乱数を発生させたい こんばんわ。fortran77で乱数を発生させるにはどうすればいいのでしょうか? 調べてみるとfortran90ならば乱数の組み込み関数が用意されているようなのですが、fortran70にはないそうです。   real function random(i)    i=843314861*i+453816693    random=real(i)/2**31   end function   do 10 k=1,n    ransu(k)=random(i) 10 continue これを用いることで乱数が発生できると書いてあったのですが、オーバーフローしてしまったせいか、値がマイナスのものが出てきてしまい、うまくできませんでした。 これ以外にも方法はないでしょうか? 私の環境はsalford FTN77です。 回答よろしくお願いします。

  • 乱数

    乱数を発生させる際に Sub Sample() Debug.Print Int((10 - 1 + 1) * Rnd + 1) End Sub で、1から10までの乱数を発生できますが、 1から10と言う連続した数字ではなく、 例えば10,13,18,43・・・ という規則性のない複数の数字からランダムに数字を発生させるにはどうすればいいでしょうか? 10,13,18,43の中から10を返したり、18を返したりする方法を教えてください。

  • エクセルの乱数発生についてお尋ねします。

    rand()のような関数のファミリーを使うと乱数が発生できます。 そこで、ある程度広がりを持ったシート内に乱数を発生させました。 それは満足していますが、マウスで処理をしたり、何かをアクティブにしたり非アクティブにしたりする操作をすると、乱数が毎回発生してしまいます。シートの数字がパッと変わるのです。 乱数を発生させるタイミングがコントロールできていないわけですが、どのように考えたらいいでしょうか。1回乱数を発生させたら固定したままで、”では、ここで乱数を発生させる”というコマンドの出し方なのですが。エクセルではどうしたらいいでしょうか。

  • 乱数発生

    自分でC++で乱数を発生させたいのですが、どのようなアリゴリズムで発生させればいいか教えてください。(時間を使うといいと聞きましたがどのように使うのでしょう)

  • 乱数の使いよう(C++)

    今、悟●伝のパクりのようなゲームを造っているんですが、 技のボタンをクリック→コンピュータの繰り出す技とこちらの技の優劣を判断→ダメージを食らうor与える という流れのプログラミングを作りたいのですが、技の優劣の判断のとき、コンピュータがランダムに技を出すためには、乱数発生の関数をつかえばよいのでしょうか? すみませんが、御教授のほどヨロシクおねがいします。

  • 疑似乱数の発生

    Z80で疑似乱数を発生させたいのですが、どのようにすれば良いでしょうか? あと、一般的な疑似乱数の発生のさせ方についても教えていただければ有り難いです

  • 発生乱数の偏りを無くしたい

    エクセルで=RAND()を用いてA1~A100のセルに100個乱数を発生させたときに(乱数は0~1の幅)、0~1の値を偏り無く発生させることは可能でしょうか?? 発生した100個の乱数をコピーして形式を“値”にして貼り付けてその100個の乱数の平均や中央値をみてみると0.5にはならないことから疑問に思いました・・・。 ご存知の方アドバイスよろしくお願いします。