• ベストアンサー

乱数について・・・

(1)1,2,3,4の整数のどれかを乱数で発生させる方法 (2)0~1までの実数を発生させる方法 を教えていただけないでしょうか?(a.outするたびに値が変わってほしいです。) ※一応、下のプログラムにあるように実行するたびに違う乱数がanswerに入るようにはできたのですが、いまいち理解できていません。軽い説明や参考URLなども教えてもらえたら助かります。 よろしくお願いします。 #include<time.h> int main() { unsigned short time_a,time_b; unsigned long answer; time_a = time(NULL); time_b = time_a; srand(time_b); answer = rand(); printf("答えは = %d\n",answer); }

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

  • ベストアンサー
  • leila7013
  • ベストアンサー率41% (10/24)
回答No.2

No.1の方の回答は高度すぎる部分も含んでますので、とりあえず簡単なやり方をば。 あと、気になったので指摘を。 time_b = time_a; これをやる意味はあまりないですので、前後を考えて以下のように省略します。 srand((unsigned)time(NULL)); この一行で乱数が初期化されます(実行するたびに違う結果になるはずです)。 srand 関数は乱数の初期化を行います。 これに定数をあててしまうと、srand関数内部での処理は毎回ほぼ同じことをやるため、結果常に同じ数が出てきてしまいます。 ですんで、実行時の時間を取得し、当ててやるのです。 で、rand関数を使用した乱数は内部で最大値の制限が暗示的に行われていて、乱数取得関連の関数では制限が効かない(笑)ため、乱数を取得した後に要らない部分を計算で切り捨ててやる方法が楽です。 anser = rand() % 10;//乱数の剰余 2も多分似たようなやり方でどうにかなるかと思います。 ただしクセが強いため、ゲームなどではもっと精密なマクロなどを使うようです。

20centuryboy
質問者

お礼

親切に解答していただきありがとうございました。おかげでかなり理解が進みました。また、教えていただける機会がありましたらよろしくお願いします。

その他の回答 (2)

noname#30727
noname#30727
回答No.3

(2) rand() は 0~RAND_MAX の範囲で擬似乱数を生成するので、RAND_MAX が返ったときに 1.0 とするには、(double)rand() / RAND_MAX としてやればよい。 ※ RAND_MAX は stdlib.h で定義されています

  • tksoft
  • ベストアンサー率36% (99/273)
回答No.1

こちらはどうでしょう http://www.bohyoh.com/CandCPP/FAQ/FAQ00069.html また、こんなのもあります。 http://www001.upp.so-net.ne.jp/isaku/rand.html

関連するQ&A

専門家に質問してみよう