首页 > 编程知识 正文

随机种子一样随机数一样吗,随机 种子

时间:2023-05-05 21:54:21 阅读:177661 作者:1081

由于随机数使用较少,从未深入了解其产生原理。 本节介绍两个函数: rand (和srand )。 前者生成伪随机数,后者生成随机种子。

一、兰德() )。

rand ) )可以生成0到0~RAND_MAX之间的随机数,返回值是unsigned int类型的值。 以下代码:

# include iostream # include stdlib.h # include time.husingnamespacestd; void main () for ) intI=0; i 10; I ) {coutrand (() ) ); }coutendl; }

执行结果如下。

再次运行此函数时,随机数如下所示:

二. srand () )

从以上两次执行结果中,发现了一个问题。 两次循环调用rand ()生成的随机数序列相同。 是的,这就是伪随机数。 就像系统中已经有了0~RAND_MAX的不按顺序排列一样。 我们调用rand )时参考这个数组和随机种子。 此处未设置随机种子,因此如果随机种子为1且随机种子为x,则可以根据此随机种子x计算随机数f(x,m )。 例如,如果随机种子为2且函数为线性,则调用rand ()一次时发生的随机数为2*41,第二次调用时发生的随机数为2*18467。

从这里可以看到,如果随机种子是固定的,那么每次调用rand )时都可以进行计算。 因此,这里的随机种子希望是不可预测的。 作为当前时间,time ) )函数将当前时间作为随机种子获取,然后计算序列和当前时间求出随机数,每次调用rand )时,随机种子都会发生变化。 因此,我们生成的代码如下。

# include iostream # include stdlib.h # include time.husingnamespacestd; void main () srand (int ) time(0)0); for(intI=0; i 10; I ) {coutrand (() ) ); }coutendl; }

两次的运行结果不同。 因为时间一直在变化。

关于伪随机数和随机种子通过什么样的函数计算才能得到最后的随机数,存在着很多函数,对此没有进行深入的研究。

三.控制随机数范围

随机数rand () )的返回值介于0和0~RAND_MAX之间,但您可能希望具体控制出现的随机数的范围。 因此,通过取剩余可以得到这个效果。

1、1到10的随机数rand ();

2、-25~25的随机数rand ) ) q

3、[a,b]上的随机数((double ) rand )/RAND_MAX ) )产生B-a )。 其中,) double ) rand )/RAND_MAX )可以获得一个随机数

# include iostream # include stdlib.h # include time.husingnamespacestd; void main () srand (int ) time(0)0); for(intI=0; i 10; I () cout (double ) rand )/RAND_MAX ) ) 60-50 ) 50 ' ); 获取50到60之间的随机数(}coutendl; }

执行结果如下。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。