名前空間
変種
操作

std::rand

提供: cppreference.com
< cpp‎ | numeric‎ | random
 
 
 
擬似乱数生成
一様ランダムビットジェネレータ
エンジンとエンジンアダプタ
非決定的なジェネレータ
分布
一様分布
ベルヌーイ分布
ポアソン分布
正規分布
標本分布
シードシーケンス
(C++11)
C のライブラリ
rand
 
ヘッダ <cstdlib> で定義
int rand();

0RAND_MAX の間 (0 および RAND_MAX も含まれます) の擬似乱数の整数値を返します。

std::srand()rand() によって使用される擬似乱数ジェネレータをシードします。 いかなる srand() の呼び出しよりも前に rand() が使用された場合、 rand()srand(1) によってシードされたかのように動作します。

srand() を使用して rand() がシードされるたびに、連続する呼び出しに対して同じ値のシーケンスを生成しなければなりません。 標準ライブラリの他の関数�� rand を呼ぶかもしれません。 どの関数がそうであるかは処理系定義です。

rand() がスレッドセーフかどうかは処理系定義です。

目次

[編集] 引数

(なし)

[編集] 戻り値

0RAND_MAX の間の擬似乱数の整数値。

[編集] ノート

生成される乱数シーケンスの品質についての保証はありません。 過去には、 rand() の実装によっては、生成されるシーケンスのランダム性、分散、周期に深刻な欠陥がありました (広く知られているひとつの例は、呼ぶたびに下位ビットが 10 を交互に繰り返していました)。

rand() は本格的な乱数生成のニーズに対しては推奨されません。 rand() を置き換える C++11 の乱数生成機能の使用が推奨されます。 (C++11以上)

[編集]

#include <cstdlib>
#include <iostream>
#include <ctime>
 
int main() 
{
    std::srand(std::time(nullptr)); // use current time as seed for random generator
    int random_variable = std::rand();
    std::cout << "Random value on [0 " << RAND_MAX << "]: " 
              << random_variable << '\n';
 
    // roll a 6-sided die 20 times
    for (int n=0; n != 20; ++n) {
        int x = 7;
        while(x > 6) 
            x = 1 + std::rand()/((RAND_MAX + 1u)/6);  // Note: 1+rand()%6 is biased
        std::cout << x << ' ';
    }
}

出力例:

Random value on [0 2147483647]: 726295113
6 3 6 2 6 5 6 3 1 1 1 6 6 6 4 1 3 6 4 2

[編集] 関連項目

範囲内に一様に分布した整数値を生成します
(クラステンプレート) [edit]
擬似乱数ジェネレータをシードします
(関数) [edit]
std::rand によって生成可能な最大値
(マクロ定数) [edit]
指定された範囲のランダムな整数を生成します
(関数テンプレート) [edit]