名前空間
変種
操作

rand

From cppreference.com
< C言語‎ | 数値‎ | 乱数
ヘッダー <stdlib.h> で定義
int rand();

0 から RAND_MAX までの疑似乱数整数値を返します(0RAND_MAX を含む)。

srand() は、rand() が使用する疑似乱数生成器にシードを設定します。rand()srand() の呼び出し前に使用した場合、rand()srand(1) でシードが設定されたかのように動作します。srand()rand() がシードされるたびに、同じ値のシーケンスを生成する必要があります。

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

目次

[編集] パラメータ

(なし)

[編集] 戻り値

0 から RAND_MAX までの疑似乱数整数値(両端を含む)。

[編集]

生成される乱数列の品質について、保証はありません。過去には、rand() の実装において、生成されるシーケンスのランダム性、分布、周期に深刻な欠陥があった例があります(よく知られている例では、下位ビットが呼び出し間で単に 10 を交互に繰り返すだけでした)。rand() は、暗号化のような、真剣な乱数生成のニーズには推奨されません。

POSIX では、rand が使用する疑似乱数生成器の周期は少なくとも 232
であることが要求されています。

POSIX は、`rand_r` というスレッドセーフ版の rand を提供していましたが、これは drand48 ファミリの関数に取って代わられ、廃止されました。

[編集]

#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);
 
    // roll a 6-sided die 20 times
    for (int n=0; n != 20; ++n) {
        int x = 7;
        while(x > 6) 
            x = 1 + rand()/((RAND_MAX + 1u)/6); // Note: 1+rand()%6 is biased
        printf("%d ",  x); 
    }
}

実行結果の例

Random value on [0,2147483647]: 448749574
3 1 3 1 4 2 2 1 3 6 4 4 3 1 6 2 3 2 6 1

[編集] 参考文献

  • C17標準 (ISO/IEC 9899:2018)
  • 7.22.2.1 The rand function (p: 252)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.22.2.1 The rand function (p: 346)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.20.2.1 The rand function (p: 312)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 4.10.2.1 The rand function

[編集] 関連項目

擬似乱数生成器にシードを設定する
(関数) [編集]
rand() で生成可能な最大値
(マクロ定数) [編集]
English 日本語 中文(简体) 中文(繁體)