C言語 | 高度な機能 | 乱数 - rand(), srand()

C標準ライブラリには疑似乱数を生成する関数があります。

ランダムな値を得る

rand()stdlib.h で宣言されています。

int rand(void);

0 から RAND_MAX までの整数を返します。同じ初期シードからは同じ数列が生成されるため、完全な乱数ではなく疑似乱数です。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  int iCount;
  printf("RAND_MAX = %d\n", RAND_MAX);
  for (iCount = 0; iCount < 10; iCount++)
    printf("乱数 %d = %d\n", iCount, rand());
  return 0;
}

シードを設定するには srand() を使います。

void srand(unsigned int seed);

実行ごとに異なる数列が必要な場合は、現在時刻を使う方法が一般的です。

#include <stdlib.h>
#include <time.h>

srand((unsigned int)time(NULL));

0.0 以上 1.0 未満の値を得るには、RAND_MAX + 1.0 で割ります。

#undef random
#define random() ((double)rand() / ((double)RAND_MAX + 1.0))

rand() はシミュレーションや簡単なゲームには使えますが、暗号用途には適していません。