rand

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

返回 0RAND_MAX 间的随机整数值(包含 0 与 RAND_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));// 以当前时间为随机生成器的种子int random_variable = rand();printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable);   // 扔 6 面色子 20 次for(int n =0; n !=20;++n){int x =7;while(x >6) x =1+ rand()/((RAND_MAX+ 1u)/6);// 注意: 1 + rand() % 6 有偏差!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 The rand function (第 252 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.22.2.1 The rand function (第 346 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.20.2.1 The rand function (第 312 页)
  • C89/C90 标准(ISO/IEC 9899:1990):
  • 4.10.2.1 The rand function

[编辑]参阅

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