std:: rand
| Common mathematical functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Mathematical special functions (C++17) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Mathematical constants (C++20) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Basic linear algebra algorithms (C++26) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Data-parallel types (SIMD) (C++26) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Floating-point environment (C++11) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Complex numbers | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Numeric array (
valarray
)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Pseudo-random number generation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Bit manipulation (C++20) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Saturation arithmetic (C++26) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Factor operations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Interpolations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Generic numeric operations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| C-style checked integer arithmetic | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ヘッダーで定義
<cstdlib>
|
||
|
int
rand
(
)
;
|
||
範囲
[
0
,
RAND_MAX
]
から疑似乱数の整数値を返します。
std::srand()
は
rand()
で使用される擬似乱数生成器を初期化します。
もし
rand()
が
std::srand()
の呼び出しより前に使用された場合、
rand()
は
std::
srand
(
1
)
で初期化されたかのように動作します。
rand()
が
std::srand()
でシードされるたびに、連続する呼び出しで同じ値のシーケンスを生成しなければなりません。
標準ライブラリ内の他の関数は
rand
を呼び出す可能性があります。どの関数がこれを行うかは実装定義です。
rand()
がスレッドセーフであるかどうかは実装定義です。
目次 |
戻り値
0 と RAND_MAX の間の疑似乱数整数値。
注記
生成される乱数列の品質について保証はありません。
過去には、一部の
rand()
実装において、生成される数列の乱数性、分布、周期に重大な欠陥がありました(有名な例では、下位ビットが呼び出しごとに単に
1
と
0
を交互に繰り返す場合がありました)。
rand()
は、本格的な乱数生成のニーズには推奨されません。
C++11の
乱数生成機能
を使用して
rand()
を置き換えることが推奨されます。
(C++11以降)
例
以下の関数
bounded_rand()
は、
Debiased Modulo (Once)
を修正したバージョンです。
#include <cstdlib> #include <ctime> #include <initializer_list> #include <iostream> unsigned bounded_rand(unsigned range) { for (unsigned x, r;;) if (x = rand(), r = x % range, x - r <= -range) return r; } int main() { std::srand(std::time({})); // use current time as seed for random generator const int random_value = std::rand(); std::cout << "Random value on [0, " << RAND_MAX << "]: " << random_value << '\n'; for (const unsigned sides : {2, 4, 6, 8}) { std::cout << "Roll " << sides << "-sided die 8 times: "; for (int n = 8; n; --n) std::cout << 1 + bounded_rand(sides) << ' '; std::cout << '\n'; } }
出力例:
Random value on [0, 2147483647]: 948298199 Roll 2-sided die 8 times: 2 2 1 2 1 1 2 2 Roll 4-sided die 8 times: 1 3 4 2 1 3 3 1 Roll 6-sided die 8 times: 3 2 1 6 6 4 4 2 Roll 8-sided die 8 times: 4 5 6 6 3 6 1 2
関連項目
|
(C++11)
|
範囲内で均一に分布する整数値を生成する
(クラステンプレート) |
|
擬似乱数生成器をシードする
(関数) |
|
|
std::rand
によって生成可能な最大値
(マクロ定数) |
|
|
指定された範囲内の乱数整数を生成する
(関数テンプレート) |
|
|
Cドキュメント
for
rand
|
|