VC++如何产生随机数
来源:百度知道 编辑:UC知道 时间:2024/09/23 00:25:53
怎么精确到毫秒,不明白。复杂的运算又怎样做?
还有什么可以作为随机数的种子,举个例子。
#include "math.h"
#define GetRandom(min,max) ((rand()%(int)(((max)+1)-(min)))+(min))
//生成min ,max 之间的随机数
//如果要产生4位数的可以min=1000,max=9999 就可以了,下面给出用例
//产生12个随机数
for (p=0; p<12; p++) {
float f1 = (float) GetRandom(1000, 9999) + ((float) GetRandom(1, 150) / 100.0F);//生成随机数
}
计算机是不能产生真正的随机数的,都是伪随机的。
就用时间做为种子,精确到毫秒就行了。
或者做一些复杂运算,比如上次产生的随即数取正弦,除以现在的时间,再平方作为下次的种子数。
API函数GetTickCount可以精确到毫秒。
复杂的运算比如说,你用现在的时间(精确到毫秒)除以鼠标所在的位置(比如鼠标的X坐标乘以Y坐标),这个结果再取正弦,然后让这个数做为种子,这个应该没问题了吧。
程序调用srand和rand产生的随机数,只要种子一样,那么产生的结果肯定是一样的.就如楼上所说,他是伪随机的.
所以你在使用时间作为种子时,只要播一次种子就可以了.
一般情况下,以上随机函数是够用的.
当然你在取得随机数设置种子时,还可以比如得到当前鼠标的位置等参数.取得与用户行为相关的参数,加上时间做一下运算,这样可以使结果更随机.
为了取得一个随机数,你可以选择把两次随机的结果进行叠加.
既然百位千位变化不大就不要用了
int a = rand() % 100;
int b = rand() % 100;
int c = a * 100 + b;
c就是你想要的四位数
--------------------------
一般用srand(time(0));设置