Qt Qt產生隨機數

2021-10-25 21:01:04 字數 2762 閱讀 1924

隨機數就是就隨機數種子中取出的數。

種子就是個序號,這個序號交給乙個數列管理器,通過這個序號,你從管理器中取出乙個數列,這個數列就是你通過那個序號得到的隨機數。

但這個隨技術並不真正隨機。因為它是通過某個演算法的得到。也就是說你給數列管理器同乙個序號將得到同樣乙個「隨機」數列。也就是說種子和隨機數列是一一對應的。

=f(x), x 就是種子,f()是演算法,是數列,這個數列看上去是隨機的,這是因為an的通項很複雜。

例如:從1、2、3、4、5、6、7、8、9、0這十個數中隨機取出乙個數,取出的數是6的話,那麼6就叫隨機數。十個數字就叫隨機數種子。如果是從1到50之間取數字,取出的數字叫隨機數,這1到50那50個數字就叫隨機數種子。

windows系統:windows10

qt版本:qt5.15或者qt6

qrandomgenerator類允許從高質量的隨機數生成器獲取隨機值。

qrandomgenerator可用於從高質量隨機數生成器生成隨機值。與c++隨機引擎一樣,qrandomgenerator可以通過建構函式使用使用者提供的值進行播種。當播

種時,這個類生成的數字序列是確定的。也就是說,給定相同的種子資料,qrandomgenerator將生成相同的數字序列。但是考慮到不同的種子,結果會有很大

的不同。

可以使用qrandomgenerator:: securely()建立乙個qrandomgenerator,該生成器安全地使用qrandomgenerator::system()進行播種,這意味著它生成的數字

序列不容易**。另外,qrandomgenerator::global()返回qrandomgenerator的全域性例項,qt將確保該例項被安全播種。這個物件是執行緒安全的,可以在大多

數情況下共享,並且總是從qrandomgenerator::system()中獲得。

system()可用於訪問系統的加密安全隨機生成器。在unix系統上,它相當於從/dev/urandom或getrandom()或getentropy()系統呼叫中讀取資料。

該類可以生成32位或64位的數量,也可以填充這些數量的陣列。生成新值的最常見方法是呼叫generate()、generate64()或fillrange()函式。有人會把它當作:

qurandomgenerator::global()->generate();

此外,它還提供了乙個浮點函式generatedouble(),該函式返回範圍為0,1的數字。

qrandomgenerator是根據c++標準庫中對隨機數引擎的要求建模的,可以在標準庫引擎可以使用的幾乎所有上下文中使用。這些要求的例外情況如下:

除了std::seed_seq本身之外,qrandomgenerator不支援從其他類似於種子序列的類中進行播種;

qrandomgenerator與std::ostream或std::istream不可比較(但可複製)或可流。

qrandomgenerator還相容統一分布類std::uniform_int_distribution和std:uniform_real_distribution,以及自由函式std::generate_canonical。例如,下面的

**可以用來生成範圍為[1,2.5]的浮點數:

std:

:uniform_real_distribution dist(1

,2.5);

return

dist

(*qrandomgenerator:

:global()

);

bound(邊界範圍)

double

bounded

(double highest)

quint32 bounded

(quint32 highest)

intbounded

(int highest)

quint32 bounded

(quint32 lowest, quint32 highest)

intbounded

(int lowest,

int highest)

fillrange(填充陣列)

void

fillrange

(uint *buffer, qsizetype count)

void

fillrange

(uint (&)

[n] buffer =..

.)

generate(產生隨機數)

quint64 generate64()

quint32 generate()

void

generate

(forwarditerator begin, forwarditerator end)

double

generatedouble

()

#include

#include

#include

#include

intmain

(int argc,

char

*ar**)

執行結果經經僅供參考,每次執行結果可能不一樣。

3

34.70804

10

產生隨機數

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

隨機數產生

c c 中取隨機數 在計算機中並沒有乙個真正的隨機數發生器,但是可以做到使產生的數字重複率很低,這樣看起來好象是真正的隨機數,實現這一功能的程式叫偽隨機數發生器。有關如何產生隨機數的理論有許多,如果要詳細地討論,需要厚厚的一本書的篇幅。不管用什麼方法實現隨機數發生器,都必須給它提供乙個名為 種子 的...

產生隨機數

一 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...