c语言伪随机函数 c++伪随机

c语言之rand函数的使用

c语言中的rand随机数函数,是按指定顺序来产生的,在生成随机数之前,在stdlib.h头文件中,会初始化函数srand,根据随机种子seed,来获取随机数,如果seed不变,每次运行得到的随机数会是一样的,因此,rand函数也被大家叫做伪随机数。下面就来介绍下rand函数的使用

公司主营业务:成都网站设计、成都网站建设、外贸网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出余江免费做网站回馈大家。

打开代码编译器,输入如下所示的代码片段

运行该代码片段,得到10个随机数,但是我们发现,不论运行几次,生成的随机数都是这10个,也就是说,在种子seed不变的情况下,生成的随机数是伪随机数

我们引入头文件time.h,取时间戳作为seed的取值来源,改代码片段如下,将srand(1)改成srand(time(NULL))

运行代码,得到10个随机数如下,定义非常量的srand参数,可以避免伪随机数的产生

浅析C语言中的伪随机数

哈喽,大家好,我是北方素素~

首先给大家解释一下这个标题,什么叫做“浅析”呢?就是稍微分析一下,哈哈。用了“浅析”就突然感觉高大上了,其实并没有多深奥,只是以我的理解给大家解释一下。

我们知道,在一些书籍中,使用C语言生成随机数一般是这样写的:

srand(unsigned(time(NULL)));

int rand_number = rand();

这里主要涉及到了三个函数,srand(),rand()和time()。

不知道这三个函数是做什么的?MSDN文档中解释了这三个函数的作用:

srand():Sets the starting seed value for the pseudorandom number generator(设置伪随机数生成器的起始种子值)。

它的搭档rand():Generates a pseudorandom number(生成一个伪随机数)。

而time()的解释就更简单了:Get the system time(获得系统时间)。

这三个函数组合在一起,就可以生成随机数。

细心的同学可能会发现这里有一个特殊的词-伪随机数。那么什么是伪随机数呢?

关于伪随机数的概念我就不多说了,大家自行搜索一下就有很多解释,在这里我只说一下自己的理解:

先说一下真随机,真随机也就是我们日常说的随机,一个随机事件的结果是不确定的,比如抛硬币,在正常情况下,抛硬币的结果是不确定的,换句话说,结果是不可预测的。

然后说说伪随机,伪随机是计算机生成随机数的一种方式,计算机不能真正模仿随机事件,而只能通过计算来生成随机数。换句话说,如果我们知道了计算机计算随机数的算法,我们是可以预测伪随机数的。

当然我们得用例子说话。

从上面的讨论我们可以知道,因为rand()产生的数字是伪随机数,所以它一定有一个固定的算法来生成伪随机数,那么算法是固定的,不固定的只有srand()所设置的种子了。

确定了这一点之后,我们就可以做实验验证我们的猜想了。

如果srand()设定的种子是一个固定值会发生什么?

srand(1);

int rand_number = rand();

在我执行了N次之后,结果都是固定的。(大家可以亲自试一试)

这就说明我们的“随机数”就是通过某种算法计算出来的结果,所以要想这个结果发生变化,就需要设定一个不断变化的“种子”。

那么这里也就解释了“种子”的作用-用来给随机数生成器提供一个输入,之后随机数生成器就会使用这个“种子”生成不同的伪随机数。

举个栗子~

如果我们的随机数生成算法是这样的:

rand=1+x;

那么我们的“种子”就是上式中的x,,每当我们输入不同的x,产生的结果rand也就会不同。

至于为什么选择time()作为“种子”嘛,上面说了,这个函数呢,用来获取系统时间,因为系统时间是一直在变化的,就相当于我们随机数的“种子”是在一直变化的,所以每次调用time()函数,都会获得不同的值,这样我们的rand()每次生成的结果也就不一样啦~

最后总结一下这三个函数在生成伪随机数的时候是怎么配合的。

首先,time()获取了系统时间;然后,srand()把获取到的系统时间设置为rand()的“种子”;最后,由rand()通过计算,把“种子”转换为一个数字。

好啦,这篇文章就写到这里了~

欢迎大家访问我的网站:,如果觉得我的文章帮到了您,可以在网站上点击“支持我”对我进行鼓励哟~(手机端网页在左上角,电脑端网页在右上角)

出处: bilibili

c语言中rand()函数怎么用?

rand函数功能为获取一个伪随机数(伪随机数的概念下面会有介绍)。

一、函数名:

rand();

二、声明:

int rand();

三、所在头文件:

stdlib.h

四、功能:

返回一个伪随机数。之所以说是伪随机数,是因为在没有其它操作下,每次执行同一个程序,调用rand得到的随机数序列是固定的(不是真正的“随机”)。

五、为了使rand的结果更“真”一些,也就是令其返回值更具有随机性(不确定性),C语言在stdlib.h中还提供了srand函数,通过该函数可以设置一个随机数种子,一般用当前时间的毫秒数来做参数。通过time(NULL)可以获取到当前时间的毫秒值(该函数位于time.h)中。

六、使用rand的流程可以总结为:

1 调用srand(time(NULL))设置随机数种子。

2 调用rand函数获取一个或一系列随机数。

需要注意的是,srand只需要在所有rand调用前,被调用一次即可,没必要调用多次。

七、以下是随机获取10个整型值并输出的例子,辅助理解。

#include stdio.h

#include stdlib.h

#include time.h

int main()

{

int i;

srand(time(NULL));//设置随机数种子。

for(i = 0; i  10; i ++)//运行10次。

printf("%d\n", rand());//每次获取一个随机数并输出。

return 0;

}

C语言随机函数

rand

和random都是伪随机函数,一般直接读取时间来做种子(sand(time))的也是不怎能随机的

我给你一个我以前写的,真正的随机:

int

myrand(void)

{

int

seed

;

asm

("rdtsc"

:

"=A"

(seed))

;

srand((unsigned

int)seed);

return

rand();

}


分享标题:c语言伪随机函数 c++伪随机
转载注明:http://azwzsj.com/article/dosjjjd.html