linux下設置rand()隨機種子(轉)


srand(設置隨機數種子)
         相關函數
         rand 
         表頭文件
         #include<stdlib.h>

         定義函數
         void srand (unsigned int seed);

         函數說明
         srand()用來設置rand()產生隨機數時的隨機數種子。參數seed必須是個整數,通常可以利用geypid()或time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

         返回值

         范例
        
         #include<time.h>
         #include<stdlib.h>
         main()
         {
         int i,j;
         srand((int)time(0));
         for(i=0;i<10;i++)
         {
         j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
         printf(" %d ",j);
         }
         }

         執行
         5 8 8 8 10 2 10 8 9 9
         2 9 7 4 10 3 2 10 8 7

rand(產生隨機數)
相關函數
srand

表頭文件
#include<stdlib.h>

定義函數
int rand(void)

函數說明
rand()會返回一隨機數值,范圍在0至RAND_MAX 間。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。關於隨機數種子請參考srand()。

返回值
返回0至RAND_MAX之間的隨機數值,RAND_MAX定義在stdlib.h,其值為2147483647。

范例

#include<stdlib.h>
main()
{
int i,j;
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d ",j);
}
}

執行
9 4 8 8 10 2 4 8 3 6
9 4 8 8 10 2 4 8 3 6

1、rand返回0-RAND_MAX之間均勻分布的偽隨機整數。 RAND_MAX必須至少為32767。rand()函數不接受參數,默認以1為種子(即起始值)。隨機數生成器總是以相同的種子開始,所以形成的偽隨機數列也相同,失去了隨機意義。(但這樣便於程序調試)
2、C++中另一函數srand(),可以指定不同的數(無符號整數變元)為種子。但是如果種子相同,偽隨機數列也相同。一個辦法是讓用戶輸入種子,但是仍然不理想。
3、 比較理想的是用變化的數,比如時間來作為隨機數生成器的種子。 time的值每時每刻都不同。所以種子不同,所以,產生的隨機數也不同。
// C++隨機函數(VC program)
#include <stdlib.h>
#include <iostream>
#include <time.h>
using namespace std;
#define MAX 100
int main(int argc, char* argv[])
{
srand( (unsigned)time( NULL ) );//srand()函數產生一個以當前時間開始的隨機種子
for (int i=0;i<10;i++)
cout<<rand()%MAX<<endl;//MAX為最大值,其隨機域為0~MAX-1
return 0;
}

http://bbs.csdn.net/topics/320237644


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM