質問: C言語で乱数を生成するプログラムをコーディングしているのですが、シード値を時間から指定しているため、1秒以内にプログラムを実行すると、同じシード値となり、同じ乱数が生成されてしまいます。 ``` #include #include #include int main(void) { srand((unsigned int)time(NULL)); // 1秒以内に実行すると同じシード値になってしまいます // 最小値:0 取得個数:10個 printf("%d\n", 0 + rand() % 10); return 0; } ``` プログラムを1秒以内に何度も実行するので、1秒以内に実行されても異なるシード値になるようにしたいのですが、なにかいい方法はありますか?
回答: 英語版での関連しそうな投稿から、いくつか使えそうなものを紹介しておきます。 sayuri さんが回答している通り、`getpid` と組み合わせる方法。 srand(time(NULL)) doesn't change seed value quick enough - Stack Overflow > > > ``` > srand( (unsigned) time(NULL) * getpid()); > > ``` > > もしくは時間の精度をマイクロ秒まであげる方法などがあるようです。 srand() — why call it only once? - Stack Overflow > > > ``` > struct timeval t1; > gettimeofday(&t1, NULL); > srand(t1.tv_usec * t1.tv_sec); > > ``` > >