关于rand()函数需要注意的地方
来源:互联网 发布:淘宝双十二有活动吗 编辑:程序博客网 时间:2024/05/07 19:36
在用到rand()函数时,需要注意以下几点:
1.程序开始时,使用srand(unsigned int)函数,设置一下随机种子,因为rand()是一个伪随机,一般使用系统时间 srand( (unsigned int)time(0) );
系统在调用rand()之前都会自动调用srand(),如果用户在rand()之前曾调用过srand()给参数seed指定了一个值,那么 rand()就会将seed的值作为产生伪随机数的初始值;而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始 值。如果给了一个定值,那么每次rand()产生的随机数序列都是一样的
2.rand()出来的值不会超过RAND_MAX,这个值一般为0x7ffff,因此如果要在一个超大的数中随机一个值,就需要做相应的处理,在此提供两种方式:
1. (int)(((double)rand()) / (double)RAND_MAX * N); N为你想扩大的倍数,但是此方法,如果扩大的倍数大于RAND_MAX的10的幂,则后面会以0补位,当然这种情况也不必太计较
2.以RAND_MAX为分割点
if ( max > RAND_MAX )
{
int nMulti = max / RAND_MAX;
int nMod = max % RAND_MAX;
int nRand = rand();
nRand *= nMulti;
nMod = rand()%nMod;
nRand += nMod;
return nRand;
}
3. 以10000为分割点,对数值进行拆分,分段随机,如1234567890 则分割为 12 3456 7890
int max = 1234567890;
const int randmax = 10000;
if ( max > randmax )
{
typedef std::list< std::pair<int,int> > RATE_LIST;
RATE_LIST vRate;
int nRate = 1;
int nTmp = max;
while ( true )
{
int nMod = nTmp % randmax;
if ( nMod > 0 )
{
if ( nMod < randmax )
nMod += randmax;
vRate.push_back( std::make_pair( nMod, nRate ) );
}
nRate *= randmax;
nTmp /= randmax;
if ( nTmp <= randmax )
{
if ( nTmp < 1 )
break;
vRate.push_back( std::make_pair( nTmp, nRate ) );
break;
}
}
RATE_LIST::iterator itr = vRate.begin();
RATE_LIST::iterator itrE = vRate.end();
int nRes = 0;
for ( ; itr!=itrE; ++itr )
{
int& nValue = itr->first;
int res = nValue * itr->second;
nRes += rand() % res;
}
return nRes;
}
- 关于rand()函数需要注意的地方
- 关于mysql函数GROUP_CONCAT 需要注意的地方
- 关于Servlet需要注意的地方
- 关于inet_ntoa使用需要注意的地方
- 关于sizeof需要注意的地方
- 关于开车需要注意的地方
- 关于thrift需要注意的地方
- 关于block使用需要注意的地方
- 关于AIDL一些需要注意的地方
- 关于电子钱包需要注意的地方
- inet_ntoa 函数需要注意的地方
- 函数传递数组需要注意的地方
- 需要注意的地方
- 需要注意的地方
- 需要注意的地方
- 关于在Linux下使用select函数需要注意的地方
- 关于vim文件格式的一个需要注意的地方
- 关于block的一些需要注意的地方
- 项目6----指针版多课成绩运算
- mac 键盘按键符号讲解
- Tomcat安装和配置
- ThreadLocal
- centos 远程登陆管理工具
- 关于rand()函数需要注意的地方
- 【listening】莫言荣获2012年诺贝尔文学奖
- 大一新生用C++做的一个比较幼稚的游戏,,
- 未将对象引用设置到对象的实例"的问题
- 背包问题(贪婪法)
- Linux Kernel 及 binder mmap实现
- 打印非字符串数组函数
- 【listening】中国对未成年人性教育的看法
- WinCE中,环境变量的添加,删除和查询