RAND(3) RAND(3) 名前 rand, srand - 乱数を生成する関数 書式 #include int rand(void); void srand(unsigned int seed); 説明 rand() 関数は0から RAND_MAX の間の疑似乱数整数を返す。 srand()関数は、rand()関数で作られる疑似乱数整数系列の新し い種として、その引数の値を使用する。 これらの関数を使用して作られた疑似乱数系列は、同じ値を引数 に使用してsrand()を呼ぶことによって、再現することが可能で ある。 種の値が与えられない場合には、rand()関数は自動的に1を種と する。 返り値 rand()関数は 0 と RAND_MAX の間の数を返す。srand()関数はど のような値も返さない。 注意 rand()とsrand()の Linux C Library 版はrandom()とsrandom() のふたつの関数と同じ乱数生成のアルゴリズムを使用している。 そのため、下位のビットは上位のビットと同じくらいにランダム である。しかし旧版のrand() の実装は、下位のビットが高次の ビットほどランダムになってはいない。 Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York: Cambridge University Press, 1990 (1st ed, p. 207)) では、次のようなコメントがなされて いる。 「1 と 10 の間の乱数を生成したいのであれば、常に j=1+(int) (10.0*rand()/(RAND_MAX+1.0)); を用いて行いなさい。そして、 j=1+((int) (1000000.0*rand()) % 10); のような、すべての方法を止めなさい(これは下位のビット を使用している)。」 乱数の生成は複雑な話題である。前述のNumerical Recipes in C でも実用的な乱数生成を論点とした優れた議論を第7章(乱数)で 展開している。 より理論的な議論については Donald E. Knuth の The Art of Computer Programming, volume 2 (Seminumerical Algorithms), 2nd ed.; Reading, Massachusetts: Addison-Wesley Publishing Company, 1981 の第3章(乱数)を見よ。これは、たくさんの実用 的な話題についても深く網羅している。 準拠 SVID 3, BSD 4.3, ISO 9899 関連項目 random(3), srandom(3), initstate(3), setstate(3)