2013-12-09 55 views
2

在任意基礎上執行基本任意精度算術的最佳方式,其中最佳性能具有任意基礎的基本任意精度算術的最佳性能

我在考慮切換到二進制,然後使用一些內聯彙編,但實際上,我需要最佳性能的方式來做到這一點,我不確定這是做到這一點的最佳方式。

編輯:我不想使用除標準C++之外的任何庫。

+2

這是一個非常寬泛的問題。 1)具有「最佳」性能的任意精度本身就是一件大事。 2)任意基礎,使得它更加複雜,因爲你必須在如何和何時改變表示之間進行權衡。 3)使用「標準C++」永遠不會讓你獲得「最佳性能」。我想要「最好」的表現,你需要變髒 - 進入組裝。 – Mysticial

+2

1.編寫一些解決問題的代碼。 2.測量它。 3.調整它。 – Devolus

+0

謝謝你的回答。我並不是故意使用這個標準庫,這更像是說我需要自己做這個。 任意底座是事物的一部分,我知道這不是件容易的事,但我正在尋找出色的性能(如果我沒有找到更好的東西,裝配就是我可能要做的事情)。 關於從任意基地切換到二進制,我不確定這是做到這一點的最佳方式,但我沒有看到更好的方法。 – Green

回答

2

問題是,多精度數值算法所能達到的「最佳」性能非常強烈地取決於您使用的數據(例如您可能需要計算的平均數量級數)。考慮算法選擇的用於通過GNU GMP作爲示例討論:

https://gmplib.org/manual/Algorithms.html

羚GMP碼也用於內部的glibc(特別是,在精確的浮點轉換碼),所以在某種意義上,它是部分的「標準C」圖書館。說到個人經驗,要擊敗GMP的表現數字是非常困難的(事實上,在一般情況下,GMP的表現要達到2倍是相當困難的,所以如果表現是絕對優先的,你可能想重新考慮你的設計目標)。在多精度計算中的性能並不強烈地依賴於實現技術(所以如果你的數字相當長,你不會使用匯編代替Java這樣的東西來贏得任何東西),算法的複雜性必然會佔主導地位。事實上,從最高級別的語言開始並從中進行優化是有道理的。

爲了以防萬一,如果您還沒有這樣做,您一定要經過Knuth的TAoCP第4卷第2卷。

我知道這可能不是你要找的答案,但它比評論還要長。