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 的種子,用來初始化...