OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

乱数について

  • すぐに回答を!
  • 質問No.227720
  • 閲覧数148
  • ありがとう数0
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 22% (97/433)

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

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

  • 回答No.3
レベル12

ベストアンサー率 31% (161/506)

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

srand(time());

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

その他の回答 (全2件)

  • 回答No.1
レベル12

ベストアンサー率 48% (325/664)

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


  • 回答No.2
レベル9

ベストアンサー率 55% (31/56)

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

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

M系列乱数の数学的解説
http://www.ysr.net.it-chiba.ac.jp/data/rand/node6.html
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ