random 產生的隨機數每一位都是隨機的

時間 2021-05-30 23:37:38

1樓:楊個毛

用mt19937,然後你就隨意用好了。只要你不用它來幹特別需要安全性的事情,一般都沒事的。另外這東西還比一些看起來簡單的隨機數生成器比如C自帶的那個快。

C自帶那個取決於具體實現,但是好像一般都很渣。而且生成的是從0到RAND_MAX的隨機數,只要RAND_MAX不是2^n-1的形式你要的性質肯定就不滿足,對吧?

2樓:王贇 Maigo

我查了半天維基百科,得到的結論跟 @Xi Yang是一樣的。概述一下我查到的內容:

從性質上說,你這樣得到的序列當然是偽隨機的。

不過我們關心的是它的隨機性對實際應用是否足夠。

有一系列統計測試可以用來評價隨機數生成器的質量。

測試的內容包括但遠遠不限於週期的長度、分布的均勻性、相鄰數字的相關性。

比較好的隨機數生成器能夠通過這些測試;更好的生成器滿足更為苛刻的條件,達到在密碼學上安全的程度。

隨機數生成器的原理有很多種,它們的質量各有優劣。

有一種隨機數生成演算法叫Mersenne twister,它是目前應用最廣泛的隨機數生成演算法。

許多程式語言自帶的隨機數生成器使用的都是這種演算法的一種特定實現MT19937,它每次生成乙個32位元的隨機數。

MT19937具有一系列優點:

1) 週期特別長(長達);

2) 分布的均勻程度高(具體指標及解釋詳見維基百科);

3) 能通過一系列統計測試。

不過,MT19937並沒有達到密碼學安全的水平。

鑑於MT19937這麼魯棒,而用它生成的隨機數序列進行的操作又那麼簡單(只是把1個32位元的隨機數拆成32個1位元的隨機數而已),我相信最終得到的隨機數序列對於一般的應用來說都足夠了,你關心的分布均勻等屬性應該沒有問題。當然,密碼學應用是不行的。

3樓:

比如最簡單的 random 生成演算法 LFSR (Linear feedback shift register), 輸入種子 seed 後, 通過bit之間的運算來算出下乙個隨機數, 所以這種情況下顯然 bit 與 bit 之間不是真隨機的, 而是存在某種規律. Linear feedback shift register

而且隨機不隨機是個哲學問題....

4樓:Xi Yang

你是說,你生成乙個N位的隨機數,然後一位一位地(或者幾位幾位地)用裡面的內容?

理論上,這取決於隨機數生成器的效能。有些生成器的效能比較爛,你這樣做可能會影響隨機性。

所以,如果不知道行不行,那就用MT19937好啦!這個通常都行。

是否有方法產生 , 的隨機數?

支浩宇 應該這麼理解無窮,無窮的乙個子集還是無窮的。乙個無限多房間的旅館,再住進來無限多人,一樣能住下,再搬走無限多人,哇塞跟沒搬之前一樣還是住滿的。所以說,你在無窮範圍裡面生成隨機數,生成的隨機數一定是無窮大的。 喵嗚大將軍 沒錯,這個問題確實等價於 生成區 0,1 的隨機實數 但問題是,生成區 ...

如何產生正態分佈的隨機數?

陳昊 老生常談的 Box Muller 方法不過實現有些不同,不用三角函式。參考 Generating Gaussian Random Numbers return a random double between zero and 1 inline double RandFloat returns ...

python中產生隨機數是均勻分布的嗎

很好驗證啊 Python版本3.5.2 In 1 from collections import CounterIn 2 import randomIn 3 Counter random randint 0 999 100for in range 1000000 Out 3 Counter FRAN...