Namespaces
Variants

srand

From cppreference.net
ヘッダーで定義 <stdlib.h>
void srand ( unsigned seed ) ;

rand() で使用される疑似乱数生成器を値 seed で初期化します。

srand() の呼び出しより前に rand() が使用された場合、 rand() srand ( 1 ) でシードされたかのように動作します。

同じ seed rand() をシードするたびに、同じ値のシーケンスを生成しなければなりません。

srand() はスレッドセーフであることが保証されていません。

目次

パラメータ

seed - シード値

戻り値

(なし)

注記

一般に、疑似乱数生成器はプログラムの開始時、 rand() の呼び出し前に一度だけシード設定すべきです。 繰り返しシード設定したり、新しい疑似乱数のバッチを生成するたびに再シード設定すべきではありません。

標準的な方法は、 time ( 0 ) の呼び出し結果をシード値として使用することです。 しかしながら、 time() time_t 型の値を返し、 time_t は整数型であることが保証されていません。 実際には、主要な実装ではすべて time_t を整数型として定義しており、これはPOSIXが要求する仕様とも一致しています。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
    srand(time(NULL)); //use current time as seed for random generator
    int random_variable = rand();
    printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable);
}

出力例:

Random value on [0 2147483647]: 1373858591

参考文献

  • C17規格 (ISO/IEC 9899:2018):
  • 7.22.2.2 srand関数 (p: 252-253)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.22.2.2 srand関数 (p: 346-347)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.20.2.2 srand関数 (p: 312-313)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 4.10.2.2 srand関数

関連項目

擬似乱数を生成する
(関数)
rand ( ) によって生成可能な最大値
(マクロ定数)