2010-06-29 31 views
4

出於純粹的興趣,我很好奇如何順序創建PI,以便在進程結果之後不再生成數字,而是允許數字在進程本身顯示時顯示產生。如果是這種情況,那麼這個數字可能會自己產生,我可以在先前看到的數字上實現垃圾回收,從而創建一個無限的系列。結果只是一系列Pi後每秒生成的一個數字。如何在Ruby中順序創建PIr

這裏是我發現通過互聯網絡篩選:

這一點,流行的計算機友好算法,該梅欽樣算法:

def arccot(x, unity) 
    xpow = unity/x 
    n = 1 
    sign = 1 
    sum = 0 
    loop do 
     term = xpow/n 
     break if term == 0 
     sum += sign * (xpow/n) 
     xpow /= x*x 
     n += 2 
     sign = -sign 
    end 
    sum 
end 

def calc_pi(digits = 10000) 
    fudge = 10 
    unity = 10**(digits+fudge) 
    pi = 4*(4*arccot(5, unity) - arccot(239, unity)) 
    pi/(10**fudge) 
end 

digits = (ARGV[0] || 10000).to_i 
p calc_pi(digits) 
+0

這將會「顯示」在哪裏?在stdout上,也許每秒都會打印出新的一行(或者可能用curses更新同一行),或者在某些GUI上? – 2010-06-29 03:12:48

+0

+1對PI的興趣:) – ldog 2010-06-29 06:55:18

+0

這只是一個愛好項目,但我想製作一個蒸汽朋克藝術作品。使用麪包板和LCD顯示器,我想我可以想出一些東西。 :D – Trip 2010-06-29 16:11:29

回答

3

要展開的「白癡的」答案:貝利 - 波爾溫 - 普勞夫公式爲你做什麼,它可以讓你計算圓周率的二進制文件(或等效十六進制)數字沒有計算所有的它之前的數字。十年前,這個公式被用來計算the quadrillionth bit of pi。這是一個0.(我敢肯定,你是在你的座位邊緣找出。)

這不是一個低內存,動態算法來計算pi的位或數字,我認爲你可以通過「順序」的意思。我不認爲任何人都知道如何在基10或基2中這樣做,儘管BPP算法可以被看作是部分解決方案。

那麼,對於pi的一些迭代公式也是有序的 - 就像一個連續的算法,從某種意義上說,每次迭代都會產生更多數字。但是,這也只是一個部分解決方案,因爲通常每個步驟的位數都是雙倍或三倍。所以你會等很多數字一段時間,而且更多的數字會很快就會被傳送出去。

事實上,我不知道是否有任何低存儲,高效的算法來產生任何標準的無理數的數字。即使對於e,你也會認爲標準無限系列是一個有效的公式,而且它的內存不足。但它在開始時只看起來內存不足,實際上也有更快的算法來計算e的許多數字。

+0

有趣:)我聽說有人從事工作的第四萬億分之一的pi,他也不確定爲什麼有人需要知道它...... – ldog 2010-06-29 06:53:30

+1

老實說,純數學中沒有人真正關心這些大型數學計算中的任何一個如梅森素數或pi的十億分之一。算法被認爲是有趣的。例如,不知pi的數字是無限地經常使用全部16位十六進制數字還是全部10位十進制數字。當然每個人都相信,但沒有人能證明這一點。 BPP算法可能是解決這個問題的有用線索。 – 2010-06-29 13:02:51

+0

在sqrt(2)的小數點之後,我們絕對可以給出第n位數字(任何基數,不只是二進制或十進制數)的算法,它不必依賴於前面的數字。也許你會對閱讀感興趣:http://stackoverflow.com/questions/2963392/0-1-knapsack-with-irrational-weights/2968021#2968021 – 2010-06-30 04:36:11

4

也許你可以用十六進制的工作嗎? David Bailey,Peter Borwein和Simon Plouffe在pi的十六進制擴展中發現了小數點後第n位的公式。

其計算公式爲:

Hexadecimal expansion of pi http://www.sciencenews.org/sn_arc98/2_28_98/math228.jpg

你可以閱讀更多關於它在這裏:http://www.andrews.edu/~calkins/physics/Miracle.pdf

是否存在這樣一個公式爲基數10仍然是開放的問題。

更多信息:http://www.sciencenews.org/sn_arc98/2_28_98/mathland.htm