計算機是如何實現「隨機生成乙個數字」這種功能的?

時間 2021-05-29 23:09:18

1樓:Belleve

偽隨機數

就是那種從種子挨個生成的隨機數,一般是用線性同餘:,如 GCC 裡,A = 1103515245,B = 12345

比較高階的是 MT19937,可以產生質量更好的隨機數。

真隨機數

用於密碼的真隨機數一般是靠收集硬體資訊,可以利用硬體的雜訊來生成,當前時間也有用處。

不過我也見過喪心病狂的,比如一些 FC 遊戲會用未初始化的記憶體作為隨機數種子……

還有一些是用使用者操作生成的,比如叫你划螢幕一段時間,然後傅利葉出高頻部分……

2樓:Xi Yang

unix系統通常會有乙個真隨機數設施,通過電腦當前的一些狀態生成,會比較慢。

偽隨機數演算法很多,你自己搜pseudo random number generator好了。

現在效能比較好的乙個PRNG是MT旋轉法(常用MT19337)。只是它不加密,得到兩個相鄰的輸出就可以推出prng的內態。

3樓:藍莓果醬

srand() 函式的種子由位移暫存器生成,一般來說是來自乙個不會重複的數比如時間,對cpu來說就是本身的時鐘頻率。得到種子以後交給rand(),由rand()來生成隨機數,得出的隨機數是int型。

說的可能有不對的地方望指正,都是以前上計算機組織結構留下的一點記憶

4樓:

事實上絕大多數random函式都是用偽隨機數生成器的方式來做的,一種最普遍的方法就是確定四個係數x0, a, b, m

然後有x[i] = (a * x[i - 1] + b) mod m

其中x0就叫做隨機數種子,一般開放給程式設計師修改的就是這個種子了例如c中的srand函式,其引數就是程式設計師想要設定的種子

5樓:龖燚

用時間做種子或者用外部輸入的資訊比如開機以來按了多少次鍵,主機板電壓是多少,啟動了多少個程序,當前所有pid總和是多少之類的資訊做種子。

計算機隨機生成乙個數是不是真的是隨機的?

逐龍 你這個問題其實跟計算機沒關係了,跟物理時空才有關係,這個已經不是計算機範疇了。你這其實是問世界能不能回到時空都一樣的瞬間,還有你這兒的歷史也已經不是指歷史,而是指時空,因為我們一般的歷史要求就是大事件沒變化就是歷史沒變化。另外,量子世界狀態目前科學認為是具有隨機性質的。 疋召 隨機本身就沒有乙...

如何從乙個計算機小白成為乙個有基本計算機素養的人?

教大專的混子一枚,也來摻和一下吧 摻和的原因是看到小桑老師的答案感覺不爽,但是我不得不說他說的每一句都是對的,讓我沒法反駁。所以我的基本態度是情感上更贊同範鈺霽,丶黑色de夜 理性上還是小桑老師說的對,下面是我的回答。我理解所謂基本計算機素養,你已經具備了,就是上上網,玩玩遊戲,打打字嘛,計算機這東...

當乙個程式大於計算機記憶體時,計算機是如何執行的

零堍 先說結論 利用虛擬儲存器 虛擬記憶體 功能,將需要的頁面或段先加載入記憶體,將暫時不需要的儲存在硬碟之中。在 計算機作業系統 中的虛擬儲存器一章中有講述到 區域性性原理 程式執行在一較短的時間內,程式的執行僅限於某個部分,相應的,它所訪問的儲存空間也侷限於某個區域。因此,虛擬儲存器的應用,便是...