我是靠谱客的博主 热情电话,最近开发中收集的这篇文章主要介绍C语言伪随机序列生成函数Pseudo-random sequence generation functionsC语言标准ISO/IEC 9899中的说明:一个实际的例子:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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中的说明:一个实际的例子:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部