std::rand
提供: cppreference.com
ヘッダ <cstdlib> で定義
|
||
int rand(); |
||
0 と RAND_MAX の間 (0 および RAND_MAX
も含まれます) の擬似乱数の整数値を返します。
std::srand() は rand()
によって使用される擬似乱数ジェネレータをシードします。 いかなる srand()
の呼び出しよりも前に rand()
が使用された場合、 rand()
は srand(1)
によってシードされたかのように動作します。
srand()
を使用して rand()
がシードされるたびに、連続する呼び出しに対して同じ値のシーケンスを生成しなければなりません。 標準ライブラリの他の関数�� rand
を呼ぶかもしれません。 どの関数がそうであるかは処理系定義です。
rand()
がスレッドセーフかどうかは処理系定義です。
目次 |
[編集] 引数
(なし)
[編集] 戻り値
0 と RAND_MAX の間の擬似乱数の整数値。
[編集] ノート
生成される乱数シーケンスの品質についての保証はありません。
過去には、 rand()
の実装によっては、生成されるシーケンスのランダム性、分散、周期に深刻な欠陥がありました (広く知られているひとつの例は、呼ぶたびに下位ビットが 1
と 0
を交互に繰り返していました)。
rand()
は本格的な乱数生成のニーズに対しては推奨されません。 rand() を置き換える C++11 の乱数生成機能の使用が推奨されます。 (C++11以上)
[編集] 例
Run this code
#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
[編集] 関連項目
(C++11) |
範囲内に一様に分布した整数値を生成します (クラステンプレート) |
擬似乱数ジェネレータをシードします (関数) | |
std::rand によって生成可能な最大値 (マクロ定数) | |
指定された範囲のランダムな整数を生成します (関数テンプレート) | |
rand の C言語リファレンス
|