用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的隨機數的問題
似乎不能直接修改宏定義,所以目前還沒有想到解決的方法
