rand
来自cppreference.com
| 在标头 <stdlib.h> 定义
|
||
| int rand(); |
||
返回 0 与 RAND_MAX 间的随机整数值(包含 0 与 RAND_MAX)。
srand() 播种 rand() 所用的伪随机数生成器。若在任何对 srand() 的调用前使用 rand(),则 rand() 表现如同它以 srand(1) 播种。每次以 srand() 播种 rand() 时,它必须产生相同的值数列。
不保证 rand() 为线程安全。
参数
(无)
返回值
0 与 RAND_MAX 间包含边界的随机整数值。
注意
无对产生的随机数质量的保证。过去,某些 rand() 的实现在随机性、分布和产生的数列周期中有严重缺陷(在一个广为人知的例子中,最低位在调用间简单地于 1 和 0 间改变)。不推荐将 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() 生成的最大可能值 (宏常量) |