2011-06-20 64 views
0

我正在使用GMP庫來製作一個Pi程序,它將計算大約7萬億個Pi的數字。問題是,我無法弄清楚需要多少位來保存這些小數位。使用GMP進行任意精度算術

+0

也許看看[此算法(http://www.math.hmc.edu/funfacts/ffiles/20010.5.shtml),如果你不需要所有的數字。 –

+4

你不知道很多數學,也許從簡單的事情開始。使用通用庫來計算數以萬億計的Pi數字將花費大量時間。 – Tobu

回答

1

7萬億位數字可以代表10 ^(7萬億)個不同數字中的任何一個。

x位可以代表2^x個不同的數字。

所以,你要解決:

2^x = 10^7000000000000 

取對數基2雙方:

x = log2(10^7000000000000) 

回想log(a^b) = b * log(a)

x = 7000000000000 * log2(10) 

我得到23253496664212位。爲了安全,我會添加一兩個。雖然,祝好運找到petabytes舉行他們。

我懷疑你會需要一個更有趣的算法。

+0

其中每一個23TB,實際上...但是,我只需要知道我需要多少位,我找不到答案,但是你來了,不僅給了答案,而且給出了一個解釋!布拉沃先生,BRAVO! –

0

2^10 = 1024,因此十位將表示略多於三位數。由於您談論的是7萬億位數,那麼這將是23萬億位或大約3萬億位,這比我上次訪問的Costco的一個驅動器上的數量要多得多。

您可能會過度活躍。我想知道每個操作的讀/寫整個磁盤的I/O時間。

(解決這個問題的數學方法是使用對數,因爲一個需要7萬億位數字的數字代表的基數爲10,大約有7萬億。在現有基數中查找數字的日誌,將基數,並且你已經得到了你的答案,爲了簡化基數2和基數10之間的關係,使用十位==三位數字,因爲這並沒有太大的錯誤,它說2的日誌基數爲.3,實際上更多。就像0.301)

1

我想只是正確的一件事是什麼寫在響應答案:

回想日誌(一^ b)= A *日誌(二)

以及它是相反的:

log(a^b) = b * log(a)