命名空间
变体
操作

std::rand

来自 cppreference.cn
< cpp‎ | 数值‎ | 随机
 
 
 
 
定义于头文件 <cstdlib>
int rand();

返回一个范围为 [0RAND_MAX] 的伪随机整数值。

std::srand()rand() 使用的伪随机数生成器播种。如果在调用任何 std::srand() 之前使用 rand(),则 rand() 的行为如同已用 std::srand(1) 播种。

每次用 std::srand()rand() 播种后,它在后续调用中必须生成相同的值序列。

标准库中的其他函数可能会调用 rand。哪些函数这样做是实现定义的。

rand() 是否线程安全是实现定义的。

目录

[编辑] 返回值

介于 0RAND_MAX 之间的伪随机整数值。

[编辑] 注意

不保证生成的随机序列的质量。过去,rand() 的一些实现存在严重的随机性、分布和序列周期缺陷(在一个著名的例子中,低位简单地在调用之间在 10 之间交替)。

不建议将 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

[编辑] 参阅

产生在给定范围内均匀分布的整数值
(类模板) [编辑]
为伪随机数生成器播种
(函数) [编辑]
std::rand 生成的最大可能值
(宏常量) [编辑]
在指定范围内生成随机整数
(函数模板) [编辑]
C 文档 用于 rand