#define
GetRandom(min,max) rand()*((float)((max)-(min)))/(float)(RAND_MAX)+(min)
http://msdn.microsoft.com/library/en-us/vclib/html/_crt__beginthread.2c_._beginthreadex.asp 中的求余变换
/*
GetRandom returns a random integer between min and max.
*/
#define GetRandom( min, max ) ((rand() % (int)(((max) + 1) - (min))) + (min))
#define GetRandom( min, max ) ((rand() % (int)(((max) + 1) - (min))) + (min))
有可能存在一定的误差。实际上,这个求余算法只是把 (0,RAND_MAX-(RAND_MAX% (int)(((max) + 1) - (min))))线性变换到( min, max ) 而已,误差的数学期望是((RAND_MAX % (int)(((max) + 1) - (min)))/RAND_MAX。如果RAND_MAX可以被范围整除,那么这个算法没有误差;在范围很小,并且min和max都是整数的时候,由于分母是RAND_MAX,所以这个算法的误差甚至可能比浮点数运算的舍入误差还要小。综上所述,上面的求余变换在指定的范围很小的时候可以作为一种可行的随机数产生方法。