- 论坛徽章:
- 8
|
你的用法是错的。
随机数常用的生成算法是“线性同余法”。
http://zhidao.baidu.com/question/540840.html
http://zh.wikipedia.org/wiki/%E7 ... 9%E6%96%B9%E7%A8%8B
以百度那个简单算法为例:
不妨取a=16807,m=2147483647,以为一常数。写个简单的程序就是:
long r;
void scand( long v)//初始化随机种子数
{
r = v;
}
long rand()//产生随机数
{
r = (r*a + c)%m;//a,c,m为常数
return r;
}
可见,怎样得到一个随机数序列?
第一步,初始化r
第二步,以r = (r*a + c)%m计算新的r,这个r就是随机数序列的第一个值
第三步,以上一步得到的r值为基础,再次以r = (r*a + c)%m计算出新的r值
反复执行第三步,得到的随机数序列就有了相对较好的分布。
(换句话说,产生随机数的过程是一个迭代过程)
而你的方法则相当于:
1、设r为当前时间
2、以r = (r*a + c)%m求出一个数字
3、重新初始化r为当前时间
4、以r = (r*a + c)%m当第二个随机数字
反复执行3、4两步。
很显然,你这个做法完全破坏了随机数的产生机制,和直接用 sin(当前时间) * 13 没什么两样。这样得到的数字有随机性才叫出鬼了
[ 本帖最后由 shan_ghost 于 2009-3-30 18:06 编辑 ] |
|