• ベストアンサー

乱数について

こんばんは。 何度も申し訳ありませんが、今回は乱数について教えてください。 LinuxでCを勉強しているんですが、 randで乱数を発生させることはできたんですが、 そのプログラムを何度実行させても 出てきた乱数は同じ値なんです。 プログラム内で例えば10こ乱数を発生させたとすると 違うものが出ます。 しかし、もう一度そのプログラムをはしらせると 前回と全く同じ並びで同じ数が出るのはどうしてでしょうか? 言ってる意味わかっていただけましたでしょうか? 宜しくお願いします。

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

  • ベストアンサー
  • KOH_da
  • ベストアンサー率31% (161/506)
回答No.3

乱数は計算によって、擬似的に求めています。 そのため同じ乱数が順番に出てきます。 乱数を初期化することで、順番の途中から使うことができます。 srand()がその関数です。 一般的にはプログラムが起動された時間を利用し、 乱数を初期化することが行なわれます。 コンパイラによって違うかもしれませんが、 たいてい、こんな感じで初期化します。 srand(time()); 他にも方法はあります。 たとえば、人が入力するまでの時間は規則性がないので、 このとき、乱数の空回しをしてやることで、 乱数の周期性をなくすことができます。 while(1) {  rand(); ←乱数の空回し  入力待ち;  if(入力あり) break; }

その他の回答 (2)

  • tokkyz
  • ベストアンサー率55% (31/56)
回答No.2

乱数はでたらめに見えますが、実は複雑な計算によって作られています。そのため初期値が同じだと同じ数字が並ぶんです。 乱数にも種類があるのでどの乱数もそうだとはいえませんが、Cではそうなってます。 Cでの使い方 http://naruzo.cside1.com/html/online/ckouza/ckouzab2.htm M系列乱数の数学的解説 http://www.ysr.net.it-chiba.ac.jp/data/rand/node6.html

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

rand()を行う前にsrand()は行ったでしょうか? 参考URLはVisualC++のものですが、互換性欄に「ANSI」と書いてあるので、Linux上のCでも同様だと思います。

参考URL:
http://www.microsoft.com/japan/developer/library/vccore/_crt_srand.htm

関連するQ&A