ベストアンサー コンピュータによる乱数発生について 2011/10/15 20:50 コンピュータで乱数を発生させる時に常に何らかのパターンが現れてしまって決して完全にランダムには成って呉れないことを証明した文献をお教え下さい。 みんなの回答 (6) 専門家の回答 質問者が選んだベストアンサー ベストアンサー rinkun ベストアンサー率44% (706/1571) 2011/10/17 10:24 回答No.5 「完全にランダム」をどう定義するかにもよると思いますが。 計算で作れる「擬似乱数」については、アルゴリズムとある時点での内部状態とが分かっていれば後の系列は計算できるので、規則性も再現性もない「真の乱数」ではあり得ないですね。 ただコンピュータで発生させるとしても、放射性源や熱雑音など物理的な装置により発生させるものもあるので、そういうものについては「完全にランデム」でないと証明することはできないでしょう。 質問者 お礼 2011/10/18 12:41 御丁寧な御回答、誠に有難う御座いました。 質問者 補足 2011/10/17 13:09 乱数を「放射性源や熱雑音など[・・・]により発生させる」方法を述べた文献をお教え下さいますでしょうか。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (5) rinkun ベストアンサー率44% (706/1571) 2011/10/17 16:49 回答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 放射線源を使う方法は、適当な放射線源をガイガーカウンタで計測して、その計測値を使うものです。この確率分布はポワソン分布になると思いますが、分布を変換して一様分布にして使えば良いことになります。 質問者 お礼 2011/10/18 12:39 御丁寧な御回答を、誠に有難う御座いました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 Ishiwara ベストアンサー率24% (462/1914) 2011/10/16 13:32 回答No.4 証明するまでもなく、一義的に答が出るプロセスを使う以上、完全にランダムとは言えません。実用上の問題は、その乱数を何に使うのかによって、どの程度のランダム性が必要になるかということです。 完全に近いランダム性を要求するならば、ハードウエア(例えば雑音発生器)と組み合わせる方法があります。 質問者 お礼 2011/12/11 16:53 誠に有難う御座いました。 質問者 補足 2011/10/17 13:11 ハードウェアと組み合わせても完全ではないのでしょうか。その事を示す文献はありますでしょうか。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 kuni-chan ベストアンサー率22% (678/3076) 2011/10/16 00:16 回答No.3 疑似乱数を発生させる方法はいくつかありますが、それぞれに周期がある事は解説されていると思います。 確率統計に関する本の中に見つける事ができるはずです。 質問者 お礼 2011/10/17 13:12 御丁寧な御回答、誠に有難う御座いました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 Tacosan ベストアンサー率23% (3656/15482) 2011/10/15 23:24 回答No.2 いや, そんな証明は無理だろ. 質問者 お礼 2011/10/17 13:12 有難う御座いました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 Trick--o-- ベストアンサー率20% (413/2034) 2011/10/15 22:02 回答No.1 コンピュータで作る乱数を「疑似乱数」といいます。 証明した文献と言うか……「コンピューターで作れる」=「真の乱数ではない」のですよね。「計算によって算出している」わけですから。 まぁ、Wikipediaで「疑似乱数」を調べていただければ。 質問者 お礼 2011/10/17 13:13 御丁寧な御回答、誠に有難う御座いました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ 学問・教育数学・算数 関連する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として書き出すというものです。乱数の発生のさせ方は質問集を見て分かったのですが、その後がさっぱり分かりません。今までできる限りは質問集を見たり、質問をして参考にして自分で取り組んだのですが、このことに関しては全く分かりません。丸投げ状態で申し訳ないのですが分かりやすく説明していただけるでしょうか。 天文学のお話。日本ではどのように考えられていた? OKWAVE コラム 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にはならないことから疑問に思いました・・・。 ご存知の方アドバイスよろしくお願いします。 乱数ってなんですか? なんどもすいません。配列のはなしなんですが、まずAという配列の中の0~10番目の中身をランダムに動かして、Bという配列に再編成させたいのですが、 乱数を使えば簡単になるよと知り合いにはいわれたのですが、乱数がどうゆうもの だかあまりよくわかりません。 自分は今VC++のMFCで作ってるのですが、乱数自体がわからないので教えてください。 それとこの方法でいくと日本語の時は配列を2個づつランダムに変えることになると思うのですが、それはぜんぜん予想もできません。教えていただけると助かります。お願いします。 乱数発生 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) {int y, m, l; srand( (unsigned)time( NULL ) ); y=rand() % 2500 + 1600; m=rand() % 12 + 1; l=rand() % 29 + 1; printf("西暦%d年%d月%d日",y,m,l); return(0); }今回は乱数発生でランダムにだされた西暦年月日をつくりましたが、y=rand() % 2500 + 1600; というのがありこれはyという乱数が2500以下1600以上という意味なのですがなぜかプログラムを実行しても3000いくつとか4000いくつなんてのもでてきます。m=rand() % 12 + 1;はちゃんと12以下1以上でできるのですがなぜですか?本当にわかりません。是非だれか教えてください。 日本史の転換点?:赤穂浪士、池田屋事件、禁門の変に見る武士の忠義と正義 OKWAVE コラム 乱数を発生させて、それを配列して小さい順に並べる 乱数の発生のさせ方は、質問集で見て import java.util.Random; class ransuu { public static void main(String args[]) { Random rand = new Random(); for ( int i = 0; i <10; i++){ int x = rand.nextInt(9); System.out.println(x); } } } を用いて表示できたのですが、そのあとの配列がよく分かりませんのでぜひ教えてください。ちなみに私の持っているテキストには任意の数(22、80、57、60、50など)を並べ替えるというものはあるのですが、今回のような乱数+配列の例が載っていないのでよく分かりませんでした。 Excel2007 一様乱数 指数乱数を用いてポアソン乱数を発生させる 指数乱数を用いてポアソン乱数を発生させるにはどうすれば良いのでしょうか。 乱数の発生方法 こんにちは! いつも大変参考にさせていただいております。 どうか教えていただきたい事があります。 数学は大の苦手で、学生時代からほとんど勉強してこなかっただけに、 数学の本を読んでも、今回の問題とどのように関係しているのかがわからず、お手上げ状態です。 実行したいのは、確率により乱数を発生させたいです。 たとえば、0から2の乱数を発生させるにあたり、 0の発生は50%、 1の発生は25%、 2の発生は25%、 というように、発生する確率を設定したいと思っています。 確率の本を読んでみたのですが、入門書には確率の求め方は載っていたのですが、それをどのように利用したらいいのかわかりません。 このような乱数の発生のさせかたは可能でしょうか? また、どのようにしたらいいのでしょうか? 教えてください。。。 乱数について MathクラスのRandomメソッドを使用して、hairetu[i] = (int)(Math.random() * 100);のように乱数を取得しているのですが、このMath.randomについても、平均を取ると大体、真ん中の50になる等の特徴があるかもしれません。一様乱数と標準正規乱数が関係するのでしょうか?この2つの違いについて教えてください(^^; 乱数発生関数randomなど random, srandom, initstate, setstate で乱数を生成できることを知りましたが、運用方法がよくわかりません。c言語に詳しい方、for文を使って乱数を5個ほど表示させるプログラムを示してください。 発生させた乱数を用いての作業 こんにちは 今回乱数発生で300個の乱数を作りました その乱数の二乗を新しいシートに出したいのですが、 単純にひとつの値をコピーして、それを二乗してオートフィル とやっても同じ値しか出てきません コピーする段階で、Sheet1のA1 のコピーという感じでできればいいのですが 単純に乱数の値しかコピーしてくれません。 どうすればできるのでしょうか? どうか教えてください 乱数を発生させるプログラムを教えてください。 タイトルのままなのですが、1から100までの乱数を発生させるプログラムを知りたいです。 乱数をxとおくと、xの値は、0<x<1の範囲内でお願いします。 C言語で、rand関数を用いて、どうかお願いします。 乱数の発生確率(c++) 0,1の2値の乱数を発生させるとき、1の発生確率を例えば20%にするにはどのようにすればよいのでしょうか。 発生乱数を除算して余りを求めて・・・・の方法など試したのですが、うまいこといきませんでした。(プログラムが動かないのではなく結果が) 私の確率の認識が間違っているのかもしれませんが、この場合、1000個発生させた場合、300近く1が出れば良いということですよね。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ 学問・教育 人文・社会科学 語学 自然科学 数学・算数 応用科学(農工医) 学校 受験・進学 留学 その他(学問・教育) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
御丁寧な御回答、誠に有難う御座いました。
補足
乱数を「放射性源や熱雑音など[・・・]により発生させる」方法を述べた文献をお教え下さいますでしょうか。