首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ srand()函数

C++ srand()函数
EN

Stack Overflow用户
提问于 2016-05-20 02:26:33
回答 2查看 767关注 0票数 0

有人能解释一下srand到底做了什么吗。我知道它与函数rand有关,而输入到srand函数中的值是种子值,但是这个种子值到底如何影响rand函数呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-20 02:32:57

在具有特定参数的srand之后,对rand的后续调用将产生完全相同的序列。因此,您可以使用srand来允许用户准确地再现使用随机数的算法的结果。例如,在我的C上

代码语言:javascript
运行
复制
rand: 16807
rand: 282475249
rand: 1622650073

srand(3)
rand: 50421
rand: 847425747
rand: 572982925

srand(3)
rand: 50421
rand: 847425747
rand: 572982925

注意,第二序列和第三序列是相同的。

如果您询问种子与以下随机数有什么确切的数字关系,这通常是不相关的;如果确实需要知道,您将需要知道所使用的精确伪随机数生成算法:不同的C编译器可以自由使用不同的算法,因为该算法没有在C语言规范中定义。

票数 1
EN

Stack Overflow用户

发布于 2016-05-20 03:32:30

下面是windows平台中的实现:

代码语言:javascript
运行
复制
static UINT32 next = 1;

int __cdecl rand(void)
{
    next = next * 1103515245 + 12345;
    /* return (unsigned int)(next / 65536) % 32768;*/
    return (UINT32)(next>>16) & RAND_MAX;
}

void __cdecl srand(unsigned int seed)
{
    /* And you *should* get a warning if sizes dont match
     */
    next = seed;
}

因此,srand只是设置随机的种子,以使后续的rand调用生成相同的输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37337006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档