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

このQ&Aに関連する最新のQ&A

A 回答 (3件)

乱数は計算によって、擬似的に求めています。


そのため同じ乱数が順番に出てきます。
乱数を初期化することで、順番の途中から使うことができます。
srand()がその関数です。
一般的にはプログラムが起動された時間を利用し、
乱数を初期化することが行なわれます。
コンパイラによって違うかもしれませんが、
たいてい、こんな感じで初期化します。

srand(time());

他にも方法はあります。
たとえば、人が入力するまでの時間は規則性がないので、
このとき、乱数の空回しをしてやることで、
乱数の周期性をなくすことができます。
while(1)
{
 rand(); ←乱数の空回し
 入力待ち;
 if(入力あり) break;
}
    • good
    • 0

乱数はでたらめに見えますが、実は複雑な計算によって作られています。

そのため初期値が同じだと同じ数字が並ぶんです。
乱数にも種類があるのでどの乱数もそうだとはいえませんが、Cではそうなってます。

Cでの使い方
http://naruzo.cside1.com/html/online/ckouza/ckou …

M系列乱数の数学的解説
http://www.ysr.net.it-chiba.ac.jp/data/rand/node …
    • good
    • 0

rand()を行う前にsrand()は行ったでしょうか?


参考URLはVisualC++のものですが、互換性欄に「ANSI」と書いてあるので、Linux上のCでも同様だと思います。

参考URL:http://www.microsoft.com/japan/developer/library …
    • good
    • 0

このQ&Aに関連する人気のQ&A

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


人気Q&Aランキング

おすすめ情報