随机数的生成,
随机数生成严格来讲并不是真正意义上的随机,而是在伪随机的情况下,模拟得更为贴近真正的随机。
伪随机的代表是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....就会出现好多行同样的随机数。
大家可以自己试试,感受一下。
浙公网安备 33010602011771号