使用c 標準庫生成隨機數

2021-08-30 02:43:56 字數 1359 閱讀 6414

c++標準庫中將隨機數的產生分為了兩個部分:隨機引擎(engine) 和分布(distriution)。標頭檔案為

隨機引擎:是隨機數的源頭,會隨機產生無正負號值,他們被隨機均勻的分布在乙個預定義最小(min())和最大(max())值之間,需要乙個種子。

分布:將隨機引擎產生的值轉換為隨機數,線性或者非線性的分布在其中。

**注意: **引擎是有狀態的,當兩個一樣的引擎,使用同乙個種子,並且狀態相同時,會產生相同的值。再加上分布之後,依然會是乙個相同的值,而不是隨機值。所以在放置種子的時候,需要仔細斟酌。

隨機引擎的一些基本操作函式:

engine e; 預設建構函式

engine e(seed);根據seed形成的狀態來建立引擎

e.seed();將引擎設為初始化狀態

e.seed(seed);將引擎根據seed而形成的狀態

e();返回下乙個隨機值,並前進其狀態;

e1 == e2;返回"e1 e();返回下乙個隨機值,並前進其狀態;

e1 != e2; 返回"e1 和e2是否不擁有相同的狀態" e1 != e2; 返回"e1 和e2是否不擁有相同的狀態"

分布

分布即是把引擎產生的隨機值轉換為真實而有用的隨意數。產生數的概率取決於使用何種分布。

如:均勻分布:

uniform_int_distribution int

uniform_real_distribution double

分布提供的一些基本操作;

result::type 被生成值的算術型別

distr d;預設建構函式

distr d(args); 建立乙個分布,以args為引數;

d(e);返回引擎e所生成的下乙個值,e將其狀態推進。

d.min() 返回最小值

d.max() 返回最大值

d(e.pt);返回引擎e和pt所生成的下乙個值,e將其狀態推進

個人理解;引擎需要的種子可以借助std::random_device來進行生成,通過operator()獲取對應的值來當引擎的種子。

#include #include #include using namespace std;

int main()

engine.seed(); // 如果不傳進種子的話,該引擎的狀態被回置以後,將會產生同樣的值

cout << "-----seed back-----------" << endl;

for (int i = 0; i < 10; ++i)

return 0;

}

C 隨機數生成

using system using system.collections.generic using system.text namespace createrandomno return sb.tostring 生成大寫字母隨機數 public static string getabcpwd i...

C 隨機數生成

標準庫 被包含於中 提供兩個幫助生成偽隨機數的函式 函式一 int rand void 從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。函式二 void srand unsigned seed 引數seed是rand 的種子,用來初始化...

C 隨機數生成

標準庫 被包含於中 提供兩個幫助生成偽隨機數的函式 函式一 int rand void 從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。函式二 void srand unsigned seed 引數seed是rand 的種子,用來初始化...