2012-10-23 90 views
4

問題在標題中。有沒有什麼寶石可以做到這一點?試過RealRand但似乎不適合我。也許我做錯了什麼?如何在ruby1.9.3中獲得真正的隨機數字?

+2

定義「真正的隨機」 –

+0

手術系統?如果可以的話,請閱讀:/ dev/random – yeyo

+0

你可以給範圍嗎?在0和1之間有無數的無限數字。 – sunnyrjuneja

回答

1

它規定「真正的」隨機數不能用一臺計算機和一個算法,它可以是genereated最好定義和「真實的」隨機數源(即不是僞隨機)我發現在http://realrand.rubyforge.org/ 簡而言之只能由大自然產生。我知道有些理論說自然只是一堆算法,所以我認爲這是超出我的水平的辯論的食物。在任何情況下,該網站都會提供一些隨機數字,例如「連接到計算機的Geiger-Müller管檢測到的連續放射性衰變對」。

我對這個產生的評論和答案感興趣,從我這裏得到+1。

2

Ruby 1.9引入了一個名爲Random的類,該類根據名爲Mersenne Twister的算法生成僞隨機數。對於個人層面的實際應用,這應該足夠了。

+0

-1這不是什麼OP要求?我知道一個僞隨機生成器是(T,e) - 與隨機生成器不可區分,但忽略這個問題而沒有解釋似乎是不合理的。 – Ziggy

2

彼得是對的。然而,我們可以用openssl和secure random獲得非常好的隨機性。

代碼:

require "securerandom" 
puts SecureRandom.random_number 
1

我想你可能需要給多一點認爲你的問題。 0和1之間有更多的實數,然後是負無窮和無窮之間的整數。提供維基百科關於實數基數的文章a look

但是,您可以輕鬆地生成範圍和精度內的實數隨機數。假設你想要生成一個真實的隨機數,其中0和1之間有16位精度。

r = Random.new 
r.rand 
=> 0.7182182166496581 

可以適應這個解決方案的更多信息生成-10和10退房http://www.ruby-doc.org/core-1.9.3/Random.htmlHow to get a random number in Ruby之間

r.rand(-10.0..10.0) 
=> 7.00152804654363 

實數。

+1

我想你可能需要對你的答案給予更多的思考。在數字計算中,數字表示爲浮點數,並結合有限的二進制數字。真正的數字不能在第一時間處理。從你的意義上說,OP可能並不意味着「真實」。你的代碼不會給出真實數字的正確分佈的隨機數字(在你的意義上的「真實」)。順便說一下,我不明白你爲什麼提到基數,但是閉區間[0,1]的基數與所有實數的基數相同。無論你指定一個範圍沒有區別。 – sawa

+0

我從來沒有聲稱基數比[0,1]要大於整個實數或R的任何子集。我提出基數的原因是因爲像你所說的那樣,不可能創建一個真正的隨機數我認爲作者所期望的無窮大和無窮大。雖然,我看到你的觀點,即代碼不能在R上的整個分佈上提供真正的隨機性。我會修改我的答案,說它提供了超過設定精度的實數隨機數。 – sunnyrjuneja

+0

我們甚至可以創建非理性數字嗎?他們不需要無限存儲嗎? – Ziggy