CppDS.com

C++ 98 11 14 17 20 手册

std::rand

来自cppreference.com
< cpp‎ | numeric‎ | random
 
 
数值库
常用数学函数
数学特殊函数 (C++17)
数学常数 (C++20)
浮点环境 (C++11)
复数
数值数组
伪随机数生成
编译时有理数算术 (C++11)
数值算法
(C++17)
(C++17)
插值
(C++20)
(C++20)
通用数值运算
(C++11)
位操作
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
 
 
定义于头文件 <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()推荐用 C++11 的随机数生成设施替换 rand() 。 (C++11 起)

示例

#include <cstdlib>
#include <iostream>
#include <ctime>
 
int main() 
{
    std::srand(std::time(nullptr)); // 以当前时间为随机生成器的种子
    int random_variable = std::rand();
    std::cout << "Random value on [0 " << RAND_MAX << "]: " 
              << random_variable << '\n';
 
    // 扔 6 面色子 20 次
    for (int n = 0; n != 20; ++n) {
        int x = 7;
        while(x > 6) 
            x = 1 + std::rand() / ((RAND_MAX + 1u) / 6);  // 注意: 1 + rand() % 6 有偏差!
        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

参阅

产生在一个范围上均匀分布的整数值
(类模板)
初始化伪随机数生成器
(函数)
std::rand 生成的最大可能值
(宏常量)
生成指定范围中的随机整数
(函数模板)
关闭