基於srand()和rand()的隨機數生成
rand()
rand()的內部實現是用線性同餘法做的,它不是真的隨機數,因其週期特別長,故在一定的範圍裡可看成是隨機的。
使用者未設定隨機數種子的時候系統預設種子是1,rand()產生的是偽隨機數,所以每次執行是都是相同的。若要不同就需要使用下面的srand()函式配合使用。
srand()
srand()用來設定rand()產生隨機數時的隨機數種子。引數seed必須是個整數,通常可以利用time(0)或time(null)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。
#include
using
namespace
std;
#include
#include
#define min 0 //隨機數產生的範圍
#define max 99
int main()
cout
0;
}
3- 產生特定範圍內的隨機數通用表達公式
要取得[a,b)的隨機整數,使用(rand() % (b-a))+ a (結果值含a不含b)。
要取得[a,b]的隨機整數,使用(rand() % (b-a+1))+ a (結果值含a和b)。
要取得(a,b]的隨機整數,使用(rand() % (b-a))+ a + 1 (結果值不含a含b)。
(總的來說,通用公式:a + rand() % n ;其中的a是起始值,n是整數的範圍)
c++11標準下隨機數的生成更加的靈活,功能更加強大。隨機數的生成是在random
類中實現的,在使用的時候要包含#include
的標頭檔案。該類下包含兩類函式,隨機數生成引擎和隨機數分布函式。
最常用的隨機數分布函式是uniform_int_engine
和uniform_double_engine
,分別代表整數型離散型均勻分布和浮點型離散型均勻分布。
最常用的隨機數生成引擎是default_random_engine
預定義的屬技術生成器,由編譯器定義。
該程式輸出15個整型的隨機數
#include
#include
#include
//該函式接受三個引數分別指定隨機數範圍和種子,返回int
int random_unint(unsigned
int min, unsigned
int max, unsigned
int seed = 0)
int main(void)
std::cout
<< std::endl;
return
0;}
1.乙個給定的隨機數發生器一直會生成相同的隨機數序列。乙個函式如果定義了區域性的隨機數發生器,應該將其(包括引擎和分布物件)定義為static的,這樣就儲存在全域性儲存區,否則每次呼叫函式都會生成相同的序列。也就是說定義成static後每次呼叫還是之前那個發生器,第一次呼叫產生一批隨機數,再次呼叫將產生接下來的隨機數,否則每次呼叫產生的都是最前面的那些隨機數。
2.依然需要使用time來做為種子產生每個不同時刻都不同的隨機序列,但由於time預設返回的是以秒計的時間,所以有可能多次使用的都是相同的種子。
c 11 生成隨機數
過程中需要輸入自變數得到輸出結果。一般來說,如果在定義域中通過列舉的方式選取自變數,所需 要的時間會很長。如果選取特定的點作為自變數,程式或數學模型的正確性無法得到保證。如果隨機選取一定數量 的自變數,所需時間可以依選取的自變數數目而定,的結果能夠反映一般情況下的結果。c 11提供均勻分布 伯努利分...
C 11產生隨機數
include include include include using namespace std 隨機數的結果一樣 void generate random 1 int num default random engine e 未用時間初始化種子,所以每次結果一樣 uniform int dis...
C 11帶來的隨機數生成器
c 11帶來諸多特性,random就是其一.1.random device 標準庫提供了乙個非確定性隨機數生成裝置.在linux的實現中,是讀取 dev urandom裝置 windows的實現居然是用rand s,在這裡強烈譴責一下.random device提供 操作符,用來返回乙個min 到m...