• ベストアンサー

毎回違う乱数を生成するにはどうしたらいいでしょうか

C言語の初心者です。よろしくお願いいたします! 乱数に関する質問:毎回違う乱数を生成するにはどうすればいいでしょうか。 学校の講義の中に  >>time() は1970 年1 月1 日0 時0 分(標準時)からの経過秒数を返 すため,1 秒以内に何度も実行すると,同じ数字で乱数を初期化す ることになり,結果も同じになってしまう. という記述がありますが、時間を置いてから、実行しても同じ結果となりました。 その一 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> int main(void) { double x,y; int i,index=0; double a,n; printf("How many trials?..."); scanf("%lf",&n); for (i=0;i<n;i++) { x=rand()/(RAND_MAX+1.0); y=rand()/(RAND_MAX+1.0); if((x*x+y*y)<1) index++;} a=4*index/n; printf("Result is %.2f(%.2f)",a,sin(-a)); return 0; } その二 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int a; srand((unsigned)time(NULL)); a=(int)(rand()/(RAND_MAX+1.0)*10); printf("%d\n",a); return 0; } お忙しい中、教えていただけたらうれしいです。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

>時間を置いてから、実行しても同じ結果となりました。 まず、srand()-rand()だけで値を表示してみる。 その後、一気に計算するのではなく、小さな単位で計算結果を表示してみる。 このとき、intではなくdouble宣言の変数でで%f表示する。 そうすると、どこに不備があるのかわかる。

walkmoon
質問者

補足

早速の返答ありがとうございます!! まず、intをdoubleに直して実行結果を確かめました。毎回これだけしか値が変わらないことがわかりました。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { double a; srand((unsigned)time(NULL)); a=rand(); printf("%f\n",a); return 0; } ここでもうひとつ追加質問させていいでしょうか。 たとえば、10以内の整数から、ランダムで数字を取るようなプログラミングを作れないでしょうか。もっと具体的に5.8301から次は5.8344みたいなのではなく、今回は5、次に9が来るかもしれないような乱数プログラミングってできないでしょうか? 何度もすみません!

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

double a; srand((unsigned)time(NULL)); a=rand(); rand( )関数の戻り値は int なのでこれはだめですよ。 >10以内の整数から、ランダムで数字を取るようなプログラミング int a, i; srand((unsigned)time(NULL)); for ( i = 0; i < 100; i++) { a = rand() % 10; // 0から9までの整数が返る printf("%d ", a); }

walkmoon
質問者

お礼

ご返答をありがとうございます。 自分の書いたプログラミングと比べて、どうがだめかよく分かりました。

関連するQ&A

専門家に質問してみよう