你現在的程式設計手段做得不到真隨機嗎?

時間 2021-05-09 13:29:00

1樓:幽藍夢星

想法不錯,但是感覺也不算隨機,你每秒迴圈,人家用多了可以試出規律來的,當人有意識的根據秒數選擇骰子時,它就已經不是隨機了。目前真隨機感覺不太可能,既然是變成,那麼它肯定就是存在邏輯應答過程的。

2樓:某人

能。很多CPU在處理浮點數計算的時候會出現一些精度上的偏差,利用這個特性,在取隨機數的時候反覆計算某些浮點數演算法會積累精度偏差,只要次數夠多,就可以用這個偏差值做種子,取到乙個就算是時間回溯都不一定能每次都一樣的真隨機數。

3樓:DemonSlience

個人認為做不到。

完全隨機意味著毫無規律,而計算機的特性已經決定了是遵循規律得到結果,這兩個是不可調和的矛盾點。

或許以後的量子計算機可以?

4樓:p01

按計算機原理,做不到。

因為所有計算結果都是一整個邏輯運算過程,只要破解了邏輯過程,得出的結果必然是一樣。

真隨機,大概就是可以在同乙個邏輯過程中得出不同的結果。

簡單例子,一台計算器器器器。看清楚是計算器。

你按三下1鍵,出來的是111。

模擬隨機就是,你按三下1,但是1鍵對應的不再是1,加上自運算條件,例如根據按鍵的壓力變化更改鍵值,所以出來的不再是111,而是123。

但是如果在另外一台計算器複製了自運算的條件,你相同力道按三下1,也是能出來123。

真隨機不能重現。

5樓:Ivony

你這就是引入外部隨機性,簡單說就是你假設你讀取的時間是隨機的,這叫做外部隨機性。但實際上很可能不是,如果讀取的時間不存在隨機性,例如是嚴格等長的,而程式執行也是理想勻速的,那你取出來的資料顯然也不是隨機的。

不是程式設計手段做不到真隨機,而是計算的原理決定了沒有內稟隨機性。

6樓:菌落軍

沒有特殊硬體的計算機做不到。

一般來說我們認為真隨機的定義是不可通過計算得出的數。

舉個例子,某粒子衰變時間是不可估計的,利用粒子衰變時間作為種子可以得到真隨機數。

而其他基於計算出來的數,不管你這個計算多麼複雜。都不能當做真隨機數

7樓:Aikov

你這個思路是對的,除了隨機程度不夠

我在MC裡就是用這個思路造紅石隨機數發生器的不管怎麼說,計算機裡你可以按照公式去理解,生成隨機數也是乙個公式的輸出,只要知道公式的全部資訊,當然就可以得到下乙個數字

所以隨機的要點不在演算法,在於怎麼讓公式的資訊不可預知,比如CPU的熱噪音或者環境噪音之類的,不過現在最常用的還是時間種子

哦對,關於種子這個詞你可以理解為公式中盡量不可預知的那個資訊剩下的內容就和計算機無關了

拿拋硬幣做例子,如果我們知道足夠多的資訊,就可以準確預知硬幣落地是正面還是反面,所以同理,只要知道這台電腦的全部資訊,包括工作環境和執行程式,仍然是可以預知下乙個數字的,但是已經非常非常難了

這種情況下稱其為真隨機數我覺得問題不大

當然如果你想要完全隨機公式都帶有不可知屬性的真隨機數生成的話

8樓:禁與千尋

什麼叫隨機?

簡單的說,給你乙個固定的程式,任何人,任何時候,任何條件下執行,得出的結果都是不確定的。

例如拋硬幣,同一枚硬幣,相同人,不同人,相同時間,不同時間,出來的結果都是不確定的。

而你這個程式,是週期迴圈的,這意味著,我每一秒一次,連續六次就能知道你的排列,然後我就能確定N秒後,得到的是什麼數字。那麼我就可以根據需要在指定時間獲得需要的點數。

能預知結果,就不算隨機。

其實你這個隨機類似於

right(now,1)

每次執行都獲取當前電腦時間的最後一位數字,表面看,你每次按出來的數字都不同。

然而你幾次下來就可以知道它的規律,導致你可以知道怎麼獲取需要的數字。

例如我知道我在2023年8月31日 12時15分16秒執行這個程式得到的是6

只要電腦的時間是對的,我就能確定,當然我還可以再別的時間獲取到6,我都能確定。

同樣別人用這個程式,或者我在別的電腦上執行這個程式,也是如此。

一旦可以在執行之前確定執行結果,那麼就不是真隨機。

如果我能確定某時某刻或者某一次硬幣的結果,那麼硬幣就不是隨機了,而是有規律的。

只有規律才可以被確定,否則只能被概率化。

當然你這個程式的結果近似隨機,是因為人自身的行為是由隨機性的,你讓兩個人都不看錶,不去嘗試,隨便,那麼對他們來說結果就是隨機的。

而這也是計算機隨機的原理,用真正的不確定的隨機資訊作為引數生成隨機數字。

例如系統硬體引數,電流,功率,溫度等等。

這些可以保證任何時候,任何人,都不能確定結果,於是就等於真隨機。

脫離了外界隨機引數,程式本身不能實現隨機。。

因為程式本身時固定的邏輯過程,又如何實現不固定的結果。

你告訴它遇到1要如何,遇到2要如何

那麼你輸入1,它就置行如何1

而做不到你輸入1它執行如何?

只有當你輸入的引數不確定,那麼結果才對應的不確定。

很多隨機函式看似是隨機的,其實只是預先設定的,在一段時間後就出現規律了。所以一般會加入隨機種子數。

如果沒有隨機種子數,你用這個隨機函式生成的數值去模擬隨機運動,出來的往往是規律結果。

例如乙個運動小球,座標 x y 不斷隨機偏移,理論上這個小球最終是無規則運動,但是直接使用隨機函式後,在執行一段時間後,小球會很有規律的運動。

9樓:Torrekie

我會請一些純小白,讓他們退出vim,然後把他們嘗試退出vim時產生的字串作為隨機數加料,這樣我們就得到了真正意義上的隨機數了。

10樓:琴梨梨

做得到haswell以後的牙膏cpu自帶硬體隨機數,基於電路噪聲音後來農企也跟進了這項技術

只要使用RDRAND指令就可以獲取真隨機數了

11樓:

真隨機一定依賴於某個物理機制設施,你這個設計骰子是怎麼隨機?不還是偽隨機

其實很多時候不一定需要真隨機,甚至就要偽隨機,因為要replay,真隨機這點就做不到。

偽隨機只要質量夠好,分布均勻,達到迴圈所需次數夠大,就可以了

12樓:

按照題主說的方法是肯定不行,太容易猜到規律了。

有兩種解決辦法(可組合):

1、把來取數的時間當成熵源,還可以加點其他的外部熵源,丟進熵池裡,然後在熵池裡取數經過安全雜湊函式再輸出。按現在的算力去對抗密碼學的安全性,猜輸出的規律是非常不實際的;

2、主流的CPU基本都有真隨機數指令(例如X86的rdrand、rdseed),很多微控制器也帶真隨機數發生器,實現原理都是pn結或電阻的雜訊做熵源,再加上m序列擾亂(調整分布)。

所以… 兩種都是真隨機數,看哪個滿足你的需要了。

參考:Intrinsics Guide

st.com/resource/en/datasheet/stm32f756bg.pdf分享、反對、舉報三連!

13樓:

電腦程式從巨集觀上來說,是乙個確定性的過程。也就是說 這樣的計算,無論怎樣計算都不會改變的。(這個要是能改變的話,那計算機就真的亂套了)。

計算能做到的是,將乙個真正隨機的變數的分布對映到另乙個分布。也就是說,要想 這樣的計算的結果按照一定的分布隨機變化,變數必須要 自己動起來,才能將某個隨機變數 對映到 。然而不幸的是,當 的時候, 是永遠成立的。

得潑一盆,題主的想法,根本不對。因為,真是情況下,無論如何擲骰子,骰子各個點出現的概率總會是 。但是題主的想法,確實有問題,因為當我每隔6秒鐘「投擲」一次題主的「骰子」的時候,這時候某乙個點數出現的概率會是 100%,而其他的則會是 0%。

(當然別和我說,投擲骰子的時間點隨機之類的問題,再看看上面那段話。)

當然,縮小迴圈的時間也是沒用的。總有辦法能在恰當的時間內丟擲骰子,然後獲得想要的結果。

14樓:喵喵喵

如果同一秒取了兩次,或是n次,這一秒內的所有結果是不是都一樣?

如果都一樣還是隨機嗎

再細化一下,將每秒換為每毫秒,那這一毫秒內結果不也是一樣真隨機我認為是描述不出來的,而電腦程式是要你描述清楚講給電腦去執行。

15樓:

知乎上有另乙個問題,你可以看一下。

為什麼有程式設計師都說取的隨機數是偽隨機數?

我個人覺得,你的想法非常的棒 ,不過計算機很難實現「真隨機數」,大部分情況下各家程式語言之提供了「偽隨機數」。

你的想法棒就棒在你說的這個方法,可以解決一定場景下的問題。

如果你現在的野心得不到你所想要的回報,而你的精力也花費不到你想要的野心上,你應該怎麼辦?

釗熊熊 在工作的過程中為了薪資,所以你是需要花費絕大一部分精力投入到你的工作產出中的。當你在一家企業工作了一年到兩年,你會漸漸對你所需要做的事宜日漸熟悉,然後你就不需要花費太多的精力投入也能很好的完成工作,這個時候才是你有精力去思考自己的 野心 自己的回報。以我個人工作歷經為例子 我適應乙個新的行業...

你的能力得不到認可時,怎麼辦?

表面很平靜 如果真的有能力,而不被認可。要麼就是你的能力在這個圈子不太重要,可以換個合適的圈子。要麼就是別人故意視而不見,畢竟很多人都不希望,或者不願意承認別人比自己強。要麼就是同事或領導壓根就不希望你有能力,你只是個工具人,果斷換工作。 秋南文化 好像沒有辦法。有時候覺得自己挺努力了,但還是沒得到...

曾經想得到而得不到的人,現在卻擺在你面前,你會要嗎?

心若止水 這得看當初為什麼得不到,是交集太少?還是差距太大?再者ta在你心中的份量有多重?現如今是什麼情況又讓ta出現在你視野中,是ta又倒追你了還是怎麼的,問題太泛泛了,不具體不好分析!簡單說就是你現在還喜不喜歡ta?喜歡又有條件接近的話,努力就是了!如果不喜歡就別浪費時間直接無視放棄就好了! 其...