隨機數產生

2021-07-09 03:17:21 字數 1612 閱讀 4909

c/c++中取隨機數 

在計算機中並沒有乙個真正的隨機數發生器,但是可以做到使產生的數字重複率很低,這樣看起來好象是真正的隨機數,實現這一功能的程式叫偽隨機數發生器。 有關如何產生隨機數的理論有許多,如果要詳細地討論,需要厚厚的一本書的篇幅。不管用什麼方法實現隨機數發生器,都必須給它提供乙個名為「種子」的初始值。而且這個值最好是隨機的,或者至少這個值是偽隨機的。「種子」的值通常是用快速計數暫存器或移位暫存器來生成的。 下面講一講在c語言裡所提供的隨機數發生器的用法。現在的c編譯器都提供了乙個基於ansi標準的偽隨機數發生器函式,用來生成隨機數。它們就是rand()和srand()函式。這二個函式的工作過程如下: 1) 首先給srand()提供乙個種子,它是乙個unsigned int型別,其取值範圍從0~65535; 2) 然後呼叫rand(),它會根據提供給srand()的種子值返回乙個隨機數(在0到32767之間) 3) 根據需要多次呼叫rand(),從而不間斷地得到新的隨機數; 4) 無論什麼時候,都可以給srand()提供乙個新的種子,從而進一步「隨機化」rand()的輸出結果。  

取0或1兩個隨機數: 

#include #include ....  

srand( (unsigned)time(null) ); //隨便呼叫一次。  int getnum()    

這樣不斷呼叫getnum()就會是0、1、0這樣不停的隨機選擇下去。 

擴充套件:**: 

c語言/c++怎樣產生隨機數:這裡要用到的是rand()函式, srand()函式,c語言/c++裡沒有自帶的random(int number)函式。 

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

#include#includevoid main()  

(2) 如果你要隨機生成乙個在一定範圍的數,你可以在巨集定義中定義乙個random(int number)函式,然後在main()裡面直接呼叫random()函式: 

例如:隨機生成10個0~100的數: #include#include

#define random(x) (rand()%x)  

void main()  

(3)但是上面兩個例子所生成的隨機數都只能是一次性的,如果你第二次執行的時候輸出結果仍和第一次一樣。這與srand()函式有關。 srand()用來設定rand()產生隨機數時的隨機數種子。在呼叫rand()函式產生隨機數前,必須先利用srand()設好隨機數種子 (seed), 如果未設隨機數種子, rand()在呼叫時會自動設隨機數種子為1。上面的兩個例子就是因為沒有設定隨機數種子,每次隨機數種子都自動設成相同值1 ,進而導致rand()所產生的隨機數值都一樣。 

srand()函式定義 : void srand (unsigned int seed);  通常可以利用geypid()或time(0)的返回值來當做seed 如果你用time(0)的話,要加入標頭檔案#include

例如: 

#include#include#include

#define random(x) (rand()%x)  

void main()  

這樣兩次執行的結果就會不一樣

產生隨機數

先說明一下rand,這個函式用來產生偽隨機數。比如,產生1000的兩個隨機數,產生的兩個一般上是不同的,但如果要產生80個100以內的隨機數,僅用rand函式就不夠。因為產生80個100以內的隨機數,至少有兩個數相等的概率太大了 srand函式,並不能使產生的隨機數完全不同。你可以執行以下這串 in...

產生隨機數

一 normrnd r normrnd mu,sigma r normrnd mu,sigma,m,n,r normrnd mu,sigma,m,n,mu sigma可以是向量或矩陣 二者同為矩陣時size要相同 但必須和r的size相同 行 列 r的size可以不指定,也可以用m,n指定 n1 n...

產生隨機數

srand 和rand 配合使用產生偽隨機數序列 srand函式是隨機數發生器的初始化函式。原型 void srand unsigned int seed rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫...