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() 生成的最大可能值 (宏常量) |