標籤:改變 沒有 int define cti ati 測試 繼承 序列
大家好.今天說點兒關於程式設計過程中產生隨機數的方法.
(一)JAVA偽隨機數產生方法
隨機數在程式設計過程中,特別是在實踐環境類比和測試等領域中得到很廣泛的應用,我們在編程的過程中也時不時需要使用到隨機數.電腦中的隨機數,並不是真正的隨機數,而是叫做"偽隨機數",是電腦通過某種特別演算法類比產生的.
在JAVA語言中,我們可以通過Math類的random方法產生區間[0,1)的隨機數,若要產生[a,a+b)之間的偽隨機數,可以通過語句 a + b * Math.random(); 來實現.該方法的方法簽名為:static double random();
Math類位於java.lang包中,而java.lang包是預設包含的,因此不需要顯式使用 import java.lang.*; 語句.在API文檔中我們可以知道該類的繼承結構:
可以知道,Math類是Obeject類的直接子類,而object類是所有其他類的直接或間接超類.Math類中聲明了許多與數學計算相關的實用成員變數和方法成員,如:
static double E; //自然對數的底數
static double PI; //顧名思義,圓周率π
在程式中可以使用它們,來代替實用const double來定義變數.
static double abs(double); //求絕對值方法
static double cos(double); //餘弦函數,與此類似,還有正弦sin方法,正切tan方法等
static double pow(double, double); //冪函數
static double sqrt(double); //開算術平方根
......
(二)C/C++中偽隨機數產生方法
在C/C++中沒有像JAVA中Math.random()這樣的方法(函數).使用的是標頭檔stdlib.h或cstdlib中的rand()函數.函數原型為:int rand(); ,產生一個0 ~ RAND_MAX之間的偽隨機整數.RAND_MAX定義在stdlib.h中,我機器上的MinGW編譯器的定義為: #define RAND_MAX 0x7FFF
若要產生(0,a)之間的隨機數,rand() % (a+1)即可;((double)rand()/RAND_MAX)*(b-a) + a, 產生區間[a,b]上的隨機數.
但是,這樣產生的偽隨機數是一個固定的序列,當再一次使用rand()函數產生隨機數時,會產生和之前相同的值.改進方法是重新設定隨機數種子(預設為1).使用函數void srand (unsigned int)來設定隨機數種子,改變偽隨機數序列.
為了是隨機數更加具有隨機性,通常使用標頭檔time.h中的time函數的傳回值作為隨機數種子,如srand((unsigned)time(0));
範例程式碼如下:
1 #include<iostream> 2 #include<cstdlib> 3 #include<ctime> 4 5 using namespace std; 6 7 int main(){ 8 9 srand((unsigned)time(0));10 11 for(int i = 0; i < 10 ;i++)12 cout<<10+rand()%21<<‘ ‘; //10~30之間的隨機數13 14 return 0;15 }
謝謝大家!轉載請註明出處,謝謝合作!
[電腦漫談]偽隨機數產生方法