Thorpe

导航

 

随机数的生成,

随机数生成严格来讲并不是真正意义上的随机,而是在伪随机的情况下,模拟得更为贴近真正的随机。

伪随机的代表是rand函数,

1 printf("%d",rand());

用printf来调用rand确实会产生一串数字,如果调用多次,也确实会生成多串数字,

但是我重新运行程序,再次printf输出rand,发现依然是那几个数字...伪随机数。

 

这时还有一个函数,srand。

上面的rand函数不管在哪台电脑上用,它都是输出那几个数字,但是我这样调用srand:

1 srand(10);
2 printf("%d",rand() );

会发现rand所输出的数字不一样了,这是因为srand的作用是播下一个种子,然后rand由这个种子产生随机数(像上面srand(10)),

也可以粗略的理解为,srand把rand的输出限定了一个范围,在这个范围内产生随机数。不过重新运行程序,依然还是会出现同样的数字...伪随机数。

 

 这个时候又有新招了...

1 srand(time(0));
2 printf("%d",rand()); 

把srand的随机数种子设置为time(0),这样会把1970年 00:00:00到现在为止的时间数随机出来,因为时间是不停的,所以哪怕再次运行程序,

出现的随机数都不会一样。这就是模拟度很高的伪随机数了...

为啥说还是伪随机数呢,因为如果运行间隔够短的话...还是会出现同样的随机数,比如用gcc,一秒内猛敲a.out....就会出现好多行同样的随机数。

 

大家可以自己试试,感受一下。

posted on 2015-07-27 19:04  Thorpe  阅读(122)  评论(0)    收藏  举报