rand 或 srand 子例程

用途

生成伪随机的数字。

标准 C 库 (libc.a)

语法

#include <stdlib.h> 
int rand
void srand ( Seed)
unsigned int Seed;

描述

注意: 请勿在多线程环境中使用 rand 子例程。 请参阅 rand_r (rand_r Subroutine) 子例程文章中的多线程替代方法。

rand 子例程使用乘法同余算法生成伪随机数。 随机数发生器的周期为 2**32,返回的连续伪随机数范围为 0 至 (2**15) -1。

srand 子例程将随机数生成器重置为新的起始点。 它使用 Seed 参数作为由后续调用 rand 子例程返回的伪随机数的新序列的种子。 如果然后调用具有相同种子值的 srand 子例程,那么 rand 子例程将重复伪随机数的序列。 当您在对 srand 子例程进行任何调用之前调用 rand 子例程时,它将生成与您首次使用种子值 1 调用 srand 子例程时相同的数字序列。

注: rand 子例程是一个简单的随机数生成器。 它的光谱特性,是随机性的数学测量,是有限的。 请参阅 drand48 子例程或 random 子例程,以获取更详细的具有更大频谱属性的随机数生成器。

参数

描述
seed(种子值) 指定初始种子值。

返回值

成功完成后, rand 子例程将按顺序返回下一个随机数。 srand 子例程不返回任何值。

如上所述,有更好的随机数生成器; 但是, randsrand 子例程是为 ANSI C 库定义的接口。

示例

以下函数定义 randsrand 子例程的语义,并包含在此处以方便从不同实现移植应用程序:

static unsigned int next = 1;
int rand( )
{
next = next 
*
 1103515245 + 12345;
return ((next >>16) & 32767);
}
void srand (Seed)


unsigned 
int Seed;
{
next = Seed;
}