1. 程式人生 > >C++隨機數 (rand srand)用法,注意隨機數種子每次要更新。

C++隨機數 (rand srand)用法,注意隨機數種子每次要更新。

計算機的隨機數都是由偽隨機數,即是由小M多項式序列生成的,其中產生每個小序列都有一個初始值,即隨機種子。(注意: 小M多項式序列的週期是65535,即每次利用一個隨機種子生成的隨機數的週期是65535,當你取得65535個隨機數後它們又重複出現了。)

我們知道rand()函式可以用來產生隨機數,但是這不是真正意義上的隨機數,是一個偽隨機數,是根據一個數(我們可以稱它為種子)為基準以某個遞推公式推算出來的一系列數,當這系列數很大的時候,就符合正態公佈,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞了系統。

1.rand()

功能:隨機數發生器

用法:int rand(void)

所在標頭檔案: stdlib.h

rand()的內部實現是用線性同餘法做的,它不是真的隨機數,因其週期特別長,故在一定的範圍裡可看成是隨機的。

rand()返回一隨機數值的範圍在0至RAND_MAX 間。RAND_MAX的範圍最少是在32767之間(int)。用unsigned int 雙位元組是65535,四位元組是4294967295的整數範圍。0~RAND_MAX每個數字被選中的機率是相同的。

使用者未設定隨機數種子時,系統預設的隨機數種子為1。

rand()產生的是偽隨機數字,每次執行時是相同的;若要不同,用函式srand()初始化它。

2.srand()

功能:初始化隨機數發生器

用法: void srand(unsigned int seed)

所在標頭檔案: stdlib.h

srand()用來設定rand()產生隨機數時的隨機數種子。引數seed必須是個整數,如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

3.使用當前時鐘作為隨機數種子

rand()產生的隨機數在每次執行的時候都是與上一次相同的。若要不同,用函式srand()初始化它。可以利用srand((unsigned int)(time(NULL))的方法,產生不同的隨機數種子,因為每一次執行程式的時間是不同的。

4.產生隨機數的用法 
1) 給srand()提供一個種子,它是一個unsigned int型別; 
2) 呼叫rand(),它會根據提供給srand()的種子值返回一個隨機數(在0到RAND_MAX之間); 
3) 根據需要多次呼叫rand(),從而不間斷地得到新的隨機數; 
4) 無論什麼時候,都可以給srand()提供一個新的種子,從而進一步“隨機化”rand()的輸出結果。

0~RAND_MAX之間的隨機數程式

#include <iostream> 
#include <stdlib.h> 
#include <time.h>  
using namespace std;  
int main() 
{  
srand((unsigned)time(NULL));  
for(int i = 0; i < 10;i++ )  
        cout << rand() << '\t';  
cout << endl;  
return 0; 
}

5.產生一定範圍隨機數的通用表示公式 
要取得[a,b)的隨機整數,使用(rand() % (b-a))+ a; 
要取得[a,b]的隨機整數,使用(rand() % (b-a+1))+ a; 
要取得(a,b]的隨機整數,使用(rand() % (b-a))+ a + 1; 
通用公式:a + rand() % n;其中的a是起始值,n是整數的範圍。 
要取得a到b之間的隨機整數,另一種表示:a + (int)b * rand() / (RAND_MAX + 1)。 
要取得0~1之間的浮點數,可以使用rand() / double(RAND_MAX)。

相關推薦

C++隨機數 (rand srand)用法注意隨機數種子每次更新

計算機的隨機數都是由偽隨機數,即是由小M多項式序列生成的,其中產生每個小序列都有一個初始值,即隨機種子。(注意: 小M多項式序列的週期是65535,即每次利用一個隨機種子生成的隨機數的週期是65535,當你取得65535個隨機數後它們又重複出現了。) 我們知道rand(

linux c產生隨機數rand(),srand()

      在C語言中,rand()函式可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,我們可以稱它為種子,為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公佈,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正

C++: this指標的用法相關知識點

1. this指標只能在類的成員函式中呼叫,表示當前物件的地址; void data::set_month(int mn) { month = mm; this->month = mn; (*this).month = mn;//三者等價 } 2. this

C++中vector的用法注意事項

#include<vector>; 一、vector 的初始化:可以有五種方式,舉例說明如下: (1)vector<int> a(10); //定義了10個整型元素的向量(尖括號中為元素型別名,它可以是任何合法的資料型別),但沒有給出初值,其值是不確

Notification用法注意API版本API大於11的setLatestEventInfo()方法已經不適用

正 文:    在做Android 4.4.2下的APP開發時,使用了Notification下的setLatestEventInfo()方法時,Eclipse卻提示:“ 不建議使用型別 Notification 的方法 setLatestEventInfo(Context, CharSequence, C

asp.net(c#)web伺服器控制元件多選框checkboxlist控制元件

<%@ Page Language="c#" %> <script runat="server"> void Page_Load() { string msg = "You have selected the following items:<b

根據給定的文字檔案words.txt(可將該檔案存放在任意目錄注意開啟檔案時加入正確的路徑)

一、根據給定的文字檔案words.txt(可將該檔案存放在任意目錄,注意開啟檔案時要加入正確的路徑)編寫函式loadWords(),words.txt包含若干小寫英文單詞。要求:1)讀入該檔案,統計並輸

C++中rand隨機數用法

     1、C++標準函式庫提供一隨機數生成器rand,返回0-RAND_MAX之間均勻分佈的偽隨機整數。 RAND_MAX必須至少為32767。rand()函式不接受引數,預設以1為種子(即起始值)。 隨機數生成器總是以相同的種子開始,所以形成的偽隨機數列也相同,失去了隨機意義。(但這樣便於程式除錯)  

C++】隨機數rand( ) 和 隨機數引擎

rand() 基本:使用隨機數時,經常見到的是C標準庫提供的函式rand(),這個函式會生成一個0到RAND_MAX(32767)之間的一個整形數; 分佈:為了得到一個給定範圍內的隨機數,通常會對生成的隨機數取餘:rand()%n,rand()%(n-m)+m; 種子:通過

C++中tan、atan、sin、cos等三角函式用法的程式碼演示及結果注意角度和弧度的轉換!

進行相機座標系相關公式推導時,經常碰到三角函式的使用。時間一長就生疏,碰到問題再查,很費時間。所以就總結一下,也希望能幫到更多的人。下面就通過簡練的程式碼,把常用的cos、sin、tan、atan等通過程式碼及結果都說清楚。注意弧度和角度的區別!!! 1、程式碼 #include <

C++11中獲取隨機數的新方法default_random_engine

C++11中,提供了一種新的獲取隨機數的方法。 以前獲取偽隨機數都是用的rand,想要獲取兩個數之間的偽隨機數,方法如下: int min,max; //定義上下邊界 int range=max-min; //獲取中間的範圍 int randNum = rand() %

C語言 rand函式生成隨機數

在實際的專案中,有時候需要生成一個隨機數,在C語言中隨機數的生成可以通過使用rand函式來實現。 rand函式包含在標頭檔案stdlib.h裡,因此使用rand函式需要宣告包含stdlib.h。 #include<stdlib.h> #inc

關於c語言rand產生隨機數相同的問題(學習筆記)

函式rand是真正的隨機數生成器(可以產生從0到32767的隨機數),而srand會設定供rand使用的隨機數種子。呼叫rand()之前沒有呼叫srand(),系統就主動呼叫srand(),導致產生同樣的隨機數(隨機數種子相同)。/*常常使用:srand(time(NULL)

C++中的srand(time(null))利用時間設定隨機種子產生隨機數

   首先需要宣告的是,計算機不會產生絕對隨機的隨機數,計算機只能產生“偽隨機數”。其實絕對隨機的隨機數只是一種理想的隨機數,即使計算機怎樣發展,它也不會產生一串絕對隨機的隨機數。計算機只能生成相對的隨機數,即偽隨機數。    偽隨機數並不是假隨機數,這裡的“偽”是有規律的

隨機數是騙人的.Net、Java、C為我作證

幾乎所有程式語言中都提供了"生成一個隨機數"的方法,也就是呼叫這個方法會生成一個數,我們事先也不知道它生成什麼數。比如在.Net中編寫下面的程式碼: Random rand = newRandom(); Console.WriteLine(rand.Next());

C語言rand()函式產生隨機數

#include <stdlib.h> #include <time.h> int main() { int i; srand((unsigned)time(NULL)); for (i=0;i<10;i++) pri

C++學習記錄6--srand(time(NULL)產生隨機數

time() 函式:返回從1970/1/1 00:00:00到呼叫time()函式時所經過的時間,以秒為單位,所以是個整數。time(NULL)或time(0)表示在記憶體中不儲存返回的數值。標頭檔案:#include<time.h> rand()

C/C++中隨機函式rand/srand用法

轉自:http://blog.csdn.net/woxueliuyun/article/details/2132543 一、C++中不能使用random()函式      random函式不是ANSI C標準,不能在gcc,vc等編譯器下編譯通過。但在C語言中int ran

C/C++常用巨集定義注意事項巨集中#和##的用法

總結下巨集和函式的不同之處,以供大家寫程式碼時使用,這段總結摘自《C和指標》一書。 當然巨集定義非常重要的,它可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。 下面列舉一些成熟軟體中常用得巨集定義 1,防止一個頭檔案被重複包含 #ifndef COMDEF_H 

C語言中生產隨機數 rand()函式

一:如果你只要產生隨機數而不需要設定範圍的話,你只要用rand()就可以了:rand()會返回一隨機數值, 範圍在0至RAND_MAX 間。RAND_MAX定義在stdlib.h, 其