2015-04-01 66 views
1

哪一個是當前在基數2^64到其他基數之間轉換的最快方法? 「任何其他基地」,我的意思是任何基地本身小於2^64。我認爲它使用基於分而治之的方法和伯恩斯坦縮放餘數樹?
一些更多細節:我特別想將未來版本的IsItNormal不同基地中的一些着名常量超過10億位數轉換。 我可以使用兩種方法:
1.在我希望的每個基數中計算該常數的十億位數。
2.從某處(例如y-cruncher)獲取數字,然後轉換爲我希望的每個基地。
我打算使用方法#2,因爲它看起來更快。在任意精度浮點算法中兩個基數之間轉換的最快方法,數量超過十億位

回答

1

就我所知,可以在O(N * log(N))操作中使用FFT進行大整數乘法和快速sqrt算法。基本思想如下。對於基數b1中的k個數字的大整數X,找到兩個整數Y & Z,使得Y & Z都不超過k/2個數字,並且X = Y * Y + Z。 (注意Z可以是負數)。這可以簡單地通過執行sqrt(X)操作完成,然後讓Y爲sqrt(X)的最接近整數,Z爲餘數。

步驟2.轉換Y均從基體B1 &Ž成鹼B2,遞歸地使用步驟1

步驟再次使用公式X = Y * Y + Z在鹼B2 3.計算X;

然後,剩餘部分是如何SQRT(X)在O(N *日誌(N))的時間,這裏的方法:

設X0 SQRT(X)的=估計; 繼續做x0 =(X/x0 + x0)/ 2直到它收斂;

這裏又出現了另一個問題:如何計算O(N * log(N))時間的1/X?方法是:

let x0 = 1/X的估計; 繼續做x0 =(2-X * x0)* x0直到它收斂;使用FFT計算O中的大數相乘(N log(N)),則整個算法可以被優化爲O(Nlog(N))。

相關問題