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的随机数的问题

 似乎不能直接修改宏定义,所以目前还没有想到解决的方法


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM