基本随机数生成

函数 rand() 可用于生成 0RAND_MAX 之间的伪随机整数值(包括 0RAND_MAX)。

srand(int) 用于为伪随机数生成器播种。每次将 rand() 播种到同一种子时,它必须产生相同的值序列。它应该只在播放 rand() 之前播种一次。每次希望生成一批新的伪随机数时,不应重复播种或重新播种。

标准做法是使用 time(NULL) 的结果作为种子。如果随机数生成器需要具有确定性序列,则可以在每个程序启动时为生成器设置相同的值。这通常不是发布代码所必需的,但在调试运行中非常有用,可以使错误重现。

建议始终为生成器播种,如果不播种,它的行为就好像是用 srand(1) 播种的。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
    int i;
    srand(time(NULL));
    i = rand();

    printf("Random value between [0, %d]: %d\n", RAND_MAX, i);
    return 0;
}

可能的输出:

Random value between [0, 2147483647]: 823321433

笔记:

C 标准不保证产生的随机序列的质量。在过去,rand() 的一些实现在生成的数字的分布和随机性方面存在严重问题。不建议将 rand() 用于严重的随机数生成需求,如加密。