C++ 生成随机数
Posted edwardzhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 生成随机数相关的知识,希望对你有一定的参考价值。
用c++写了个蚁群算法,发现用到c++随机数这里还是问题多多,下面就来总结一下:
首先调用rand()函数可以生成一个0-RAND_MAX之间的随机数,RAND_MAX的值为32767;
然后假设我输出一个rand()之后,重新编译运行代码,这个值不会变,
想要得到一个新的随机数,这里就要用到随机数种子初始化函数srand()
一般都是选择系统时间作为种子
即srand((unsigned int)time(NULL))
下面上个简单的代码
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<iostream> #define N 10 #define M 1010 using namespace std; int main() { double num,i; srand((unsigned int)time(NULL));//产生随机数的种子 cout<<RAND_MAX<<endl; for(i=1;i<=N;i++) { num= (double)(rand()%10000)/10000;//产生随机数 cout<<num<<endl; } }
注意千万不能把srand函数放到循环体里面,如下:
for(i=1;i<=N;i++) { srand((unsigned int)time(NULL));//产生随机数的种子 num= (double)(rand()%10000)/10000;//产生随机数 cout<<num<<endl; }
这样会输出N个相同的值(当N不是很大的时候),因为做N次循环的时间太短了,所以相当于给这N个数都初始化了相同的种子
最后就是如何生成大于RAND_MAX的随机数的问题
似乎不能直接修改宏定义,所以目前还没有想到解决的方法
以上是关于C++ 生成随机数的主要内容,如果未能解决你的问题,请参考以下文章