std::rand
来自 cppreference.cn
定义于头文件 <cstdlib> |
||
int rand(); |
||
返回一个伪随机整数值,范围为 [
0,
RAND_MAX]
。
std::srand() 播种 rand() 使用的伪随机数生成器。如果 rand()
在任何调用 std::srand() 之前使用,则 rand()
的行为就像是用 std::srand(1) 播种一样。
每次用 std::srand() 播种 rand()
时,它都必须在连续调用中产生相同的值序列。
标准库中的其他函数可能会调用 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 生成的最大可能值 (宏常量) | |
在指定范围内生成随机整数 (函数模板) | |