rand
来自 cppreference.cn
定义于头文件 <stdlib.h> |
||
int rand(); |
||
返回一个介于 0 和 RAND_MAX (包括 0
和 RAND_MAX
) 之间的伪随机整数值。
srand() 为 rand()
使用的伪随机数生成器设定种子。如果 rand()
在任何调用 srand()
之前使用,则 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)); // 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++ 文档 关于 rand 的说明
|