命名空间
变体
操作

rand

来自 cppreference.com
< c‎ | numeric‎ | random
定义在头文件 <stdlib.h>
int rand();

返回一个介于 0RAND_MAX(包括 0RAND_MAX)之间的伪随机整数值。

srand()rand() 使用的伪随机数生成器播种。如果在调用 srand() 之前使用 rand(),则 rand() 的行为就好像它已使用 srand(1) 播种。每次使用 srand()rand() 播种时,它都必须产生相同的数值序列。

rand() 不保证线程安全。

内容

[编辑] 参数

(无)

[编辑] 返回值

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

[编辑] 注释

生成的随机序列的质量没有保证。过去,rand() 的一些实现产生的序列的随机性、分布和周期存在严重缺陷(在一个众所周知的例子中,低位始终在每次调用之间在 10 之间交替)。rand() 不建议用于像密码学这样的严肃的随机数生成需求。

POSIX 要求 rand 使用的伪随机数生成器的周期至少为 232
.

POSIX 提供了 rand 的一个线程安全版本,名为 rand_r,但它已被 drand48 函数系列取代。

[编辑] 示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
    srand(time(NULL)); // use current time as seed for random generator
    int random_variable = rand();
    printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable);
 
    // roll a 6-sided die 20 times
    for (int n=0; n != 20; ++n) {
        int x = 7;
        while(x > 6) 
            x = 1 + rand()/((RAND_MAX + 1u)/6); // Note: 1+rand()%6 is biased
        printf("%d ",  x); 
    }
}

可能的输出

Random value on [0,2147483647]: 448749574
3 1 3 1 4 2 2 1 3 6 4 4 3 1 6 2 3 2 6 1

[编辑] 参考文献

  • C17 标准 (ISO/IEC 9899:2018)
  • 7.22.2.1 rand 函数 (p: 252)
  • C11 标准 (ISO/IEC 9899:2011)
  • 7.22.2.1 rand 函数 (p: 346)
  • C99 标准 (ISO/IEC 9899:1999)
  • 7.20.2.1 rand 函数 (p: 312)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 4.10.2.1 rand 函数

[编辑] 参见

为伪随机数生成器播种
(函数) [编辑]
rand() 生成的最大可能值
(宏常量) [编辑]
C++ 文档 for rand