std::rand
来自 cppreference.com
定义在头文件 <cstdlib> 中 |
||
int rand(); |
||
返回范围 [
0,
RAND_MAX]
中的伪随机整数值。
std::srand() 为 rand()
使用的伪随机数生成器播种。如果在调用 std::srand() 之前使用 rand()
,rand()
的行为就如同它被 std::srand(1) 播种。
每次用 std::srand() 为 rand()
播种时,它必须在连续调用时产生相同的数值序列。
标准库中的其他函数可能会调用 rand
。哪些函数会这样做是实现定义的。
rand()
是否是线程安全的也是实现定义的。
内容 |
[编辑] 参数
(无)
[编辑] 返回值
介于 0 和 RAND_MAX 之间的伪随机整数值。
[编辑] 注释
关于所产生的随机序列的质量没有保证。在过去,rand()
的一些实现存在所产生的序列的随机性、分布和周期方面的严重缺陷(在一个众所周知的例子中,低位只是在调用之间交替为 1 和 0)。
对于严肃的随机数生成需求,不推荐使用 rand()
。 建议使用 C++11 的 随机数生成 功能来替换 rand()
。(自 C++11 起)
[编辑] 示例
运行此代码
#include <cstdlib> #include <ctime> #include <iostream> int main() { std::srand(std::time(nullptr)); // use current time as seed for random generator int random_value = std::rand(); std::cout << "Random value on [0, " << RAND_MAX << "]: " << random_value << '\n'; for (const int times = 8; const int sides : {2, 4, 6, 8}) { std::cout << "Roll " << sides << "-sided dice " << times << " times: "; for (int n = 0; n != times; ++n) { int x = sides + 1; while (x > sides) x = 1 + std::rand() / ((RAND_MAX + 1u) / sides); // Note: 1 + rand() % sides is biased std::cout << x << ' '; } std::cout << '\n'; } }
可能的输出
Random value on [0, 2147483647]: 948298199 Roll 2-sided dice 8 times: 2 2 1 2 1 1 2 2 Roll 4-sided dice 8 times: 1 3 4 2 1 3 3 1 Roll 6-sided dice 8 times: 3 2 1 6 6 4 4 2 Roll 8-sided dice 8 times: 4 5 6 6 3 6 1 2
[编辑] 参见
(C++11) |
在范围内均匀分布地生成整数值 (类模板) |
为伪随机数生成器播种 (函数) | |
由 std::rand 生成的最大可能值 (宏常量) | |
在指定范围内生成随机整数 (函数模板) | |
C 文档 for rand
|