概述
C语言标准ISO/IEC 9899中的说明:
1. The rand function
Synopsis
#include<stdlib.h>
int rand(void);
Description
The rand function computes a sequece of pseudo-random integers in the range 0 to RAND_MAX.
rand函数生成大小在0到RAND_MAX之间伪随机整数序列。
The rand function is not required to avoid data races with calls to pseudo-random sequence generation functions. The implementaton shall behave as if no library function calls the rand function.
rand 函数不需要避免与其他对伪随机序列生成函数的调用发生数据竞争。 实现的行为就像没有库函数调用 rand 函数一样。
Returns
The rand function returns a pseudo-random integer.
rand函数返回一个伪随机整数。
Environmental limits
The value of the RAND_MAX macro shall be at least 32767.
宏RAND_MAX的值必须至少为32767。
2. The srand function
Synopsis
#include<stdlib.h>
void srand(unsigned int seed);
Description
The srand function uses the argument as a seed for a new sequence of pseudo-random
numbers to be returned by subsequent calls to rand. If srand is then called with the same seed value, the sequence of pseudo-random numbers shall be repeated. If rand is called before any calls to srand have been made, the same sequence shall be generated as when srand is first called with a seed value of 1.
srand 函数将输入参数用作新伪随机数序列的种子,这些伪随机数将由后续调用 rand 返回。 如果随后使用相同的种子值调用 srand,则应重复伪随机数序列。 如果在对 srand 进行任何调用之前调用了 rand,则应生成与第一次调用 srand 且种子值为 1时相同的序列。
The srand function is not required to avoid data races with other calls to pseudorandom sequence generation functions. The implementation shall behave as if no library function calls the srand function.
srand 函数不需要避免与其他对伪随机序列生成函数的调用发生数据竞争。 实现的行为就像没有库函数调用 rand 函数一样。
Returns
The srand function returns no value.
srand函数不返回值。
EXAMPLE The following functions define a portable implementation of rand and srand.
示例:以下函数定义了 rand 和 srand 的可移植实现。
static unsigned long int next = 1;
int rand(void) // RAND_MAX assumed to be 32767
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536) % 32768;
}
void srand(unsigned int seed)
{
next = seed;
}
一个实际的例子:
如果直接调用rand(),每次生成的伪随机数序列是完全相同的,因为默认的种子是1,每次执行时都按默认种子生成随机序列。
为了让函数每次运行时种子不一样,可以按系统时间生成种子。示例程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void){
srand((unsigned)time(NULL));
for(int i=0; i<20; i++){
printf("%d, ", rand());
}
return 0;
}
运行结果如下:
第一次:23484, 31299, 5065, 25173, 30219, 2761, 13088, 17369, 31780, 15570, 841, 1744, 26152, 32331, 30608, 23078, 19682, 21537, 21309, 15827
第二次:23490, 20028, 8025, 7764, 18080, 10614, 19313, 11514, 32035, 3274, 545, 1832, 4894, 32655, 9456, 24986, 7782, 25619, 24970, 30109
第三次:23497, 8757, 10985, 23122, 5941, 18468, 25538, 5660, 32290, 23746, 249, 1920, 16403, 212, 21073, 26895, 28650, 29702, 28632, 11622
第四次:23497, 8757, 10985, 23122, 5941, 18468, 25538, 5660, 32290, 23746, 249, 1920, 16403, 212, 21073, 26895, 28650, 29702, 28632, 11622
第五次:23507, 8234, 31810, 29776, 4117, 30248, 2107, 29646, 16289, 5301, 32574, 2052, 17284, 17083, 22113, 13373, 10800, 19441, 1356, 16660
其中第第三次运行和第四次运行间隔时间很短,结果完全一样,说明种子值相同。这是因为time()函数的返回值是以秒为单位的整数,在一秒内连续调用time()函数的返回值可能相同。
最后
以上就是热情电话为你收集整理的C语言伪随机序列生成函数Pseudo-random sequence generation functionsC语言标准ISO/IEC 9899中的说明:一个实际的例子:的全部内容,希望文章能够帮你解决C语言伪随机序列生成函数Pseudo-random sequence generation functionsC语言标准ISO/IEC 9899中的说明:一个实际的例子:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复