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