2020-01-24

                                            C++的随机数

C++中常用  rand()函数或者  srand()函数来随机生成数字

rand():

C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,就会失去了随机意义。(但这样便于程序调试) 


srand():

C++中另一函数srand(),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一个办法是让用户输入种子,但是仍然不理想。 


 比较理想的是用变化的数,此时可以与time等随机生成函数结合srand()函数,比如时间来作为随机数生成器的种子。 time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。 


我们初步尝试一下



从图中可知 运行结果(随机数序列)



但在多次同时运行时:

多个同时运行

结果是:

从图中来看,两次运行结果一致,这是为什么呢?因为我们两次调用srand()函数设置随机数种子之间的时间间隔不超过1s,这会导致我们重置随机数种子,从而等价于使用了一个固定的随机数种子。最后结果不尽人意。


Sleep()函数:

eg:     Sleep(1000);       表示休息一秒

括号中的表示的整数倍的毫秒

  幻想:用包含time.h头文件,然后使用srand(time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒)。

或者:sleep函数使代码停顿若干秒后 也可以保证得到不同的随机数序列。需要导入window.h使用Sleep()


我在网上看都是说1秒(sleep函数1000),但我运行不对,在手动测试后,发现数字 一直在变

那我们换一种方式:


测试方式二,随机数长一个样,使用Sleep函数试一试。


内部加了一个Sleep函数


运行结果,但好像时间间隔越长,数字差别越大,此现象暂时我还无法解释

总结

        综上所述,正确的用法是:


    而且,两次程序执行的时间间隔要大于1s,如果我们是要在某个类中定义随机数生成函数,那么可以将srand()放在构造函数中。

你可能感兴趣的:(2020-01-24)