| 
 hdm2968: 
请问怎样生成一个介于两个值之间的真正随机数?如果我有高低两个数50,-50,怎样产生它们间的随机数,我试过很多方法,要么就是不能生成小数,要么就是两边密,中间小(即靠近50和-50的数较多,靠近0的数较少),能不能平均生成? ----------------------------------------------------- whb9633  
晕,不可能生成真正的随机数,现在的CPU没有这样的能力。如果是一般生成线性分布的随机数的话,很简单。用C++这样写:  template<typename T>  T FlipRand(const T& min , const T& max)  {  return min + ((T)1 - (T)rand()/0xffffffff) * max ;  } 
 ------------------------------------------------------------------ chesskiller  
用这个方法你可以TRACE下,以后的数绝对没规律了 从计算机算法理论上来说是没有绝对的真随机的数的 只有逼近随机数 要生成在一定范围内的随机数比如(0-4.0)用下面的代码 ((FLOAT)rand()/(FLOAT)RAND_MAX) * 4.00f  
 ------------------------------------------------------------------------ 
define me God 
  
用这个方法你可以TRACE下,以后的数绝对没规律了 从计算机算法理论上来说是没有绝对的真随机的数的 只有逼近随机数 要生成在一定范围内的随机数比如(0-4.0)用下面的代码 ((FLOAT)rand()/(FLOAT)RAND_MAX) * 4.00f 
that's right. 不过象接近真正的随机数,还要注意控制随机数种子的选取,若是在一个函数里连续地取随机数,因为以系统时间做种子的话(比如srand(timeGetTime());)会取到伪随机序列上较接近的数... 
   |