标签:fine 解决 千万 初始 for clu 随机 ++ 随机数
用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的随机数的问题
似乎不能直接修改宏定义,所以目前还没有想到解决的方法
标签:fine 解决 千万 初始 for clu 随机 ++ 随机数
原文地址:https://www.cnblogs.com/EdwardZhang/p/10779825.html