C & C++ FAQ
|
C | C++ | プログラムを起動するたびに異なる乱数を発生させるにはどうすればよいですか。 |
というプログラムを実行すると、xに代入されるのは、いつも同じ値となります。#include <stdlib.h> int x; /* ... */ x = rand(); /* 0以上RAND_MAX以下の乱数を発生 */
といった具合に種の値を変更できます。もっとも、このように定数を渡してsrand関数を呼び出しても、その後にrand関数が発生する値は同一のものとなります。srand関数に与える引数は、乱数でなければなりません(??)。乱数を発生させるために、乱数が必要であるというのも、おかしな話です。srand(50); /* 種を50に設定 */
time関数が返却するのはtime_t型です。この型は処理系に依存しますが、long型やdouble型などの算術型の同義語として定義されます。#include <time.h> #include <stdlib.h> int x; /* ... */ srand(time(NULL)); /* 現在の時刻から種を決定 */ x = rand(); /* 0以上RAND_MAX以下の乱数を発生 */
標準C | §7.10.2 | Pseudo-random sequence generation functions |
標準C99 | §7.20.2 | Pseudo-random sequence generation functions |
標準C++ | §20.6.5 | C Library |
FAQ | 乱数を発生させるにはどうすればよいですか。 |
関数 | rand関数 |
関数 | srand関数 |