level 7
在各种不同编程语言都有rand,srand的函数,以下贴来的解释较容易了解:
rand() 是取虚拟乱数的函式,其回传范围是 [0, RAND_MAX)。
srand() 是设定虚拟乱数产生器的种子
所谓 pseudo random number generator(虚拟乱数产生器),是用数学公式产生「好像」是乱数的数字序列。
由於是使用数学方法算出,所以有办法
1. 重现乱数序列
2. 预测接下来的乱数序列
当然,够好的虚拟乱数产生器应该要能有效避免 2。
虚拟乱数产生器的运作方式是,先给定一个种子,然后藉由这个种子利用某个公式产生下一个数,并将产生的数重新设为种子。
所以当给定的 seed 相同的时候,接下来的乱数序列都会相同。
这也是为什麼,我们在使用上会先呼叫 srand() 来设定乱数种子,才呼叫 rand() 来取乱数。
否则由於使用的都是预设的种子,每次取到的乱数序列都会相同。
2015年01月11日 16点01分