2

我是一名研究生,致力於一個研究項目,涉及計算非常高度的數字字段中的代數整數的規範。從本質上講,這將包括將100個以上的浮點數一起乘以得到一個整數。我在C編程。用於數理論應用的擴展精確浮點的快速計算

我遇到的問題是,我開始需要計算超過1e20 = 10^20的規範,這超出了我的硬件(Macbook)的整數和浮點精度。 。

我可以嘗試使用某種軟件模擬來實現擴展精度,但我的理解是比硬件浮點計算慢大約300倍。這意味着我現在需要幾天的計算會花費幾年時間,這是不可接受的。

我有兩個問題: 問題1:對於擴展精度的軟件仿真(比如10^36精度,大約是硬件精度的兩倍),我的估計速度是300x慢得多嗎?第二季度:我有幾千美元來解決這個問題,可能有什麼樣的硬件解決方案?

+1

我看到downvote。這是我第一次在這裏發佈,所以如果這不是這個論壇的適當類型的問題,請指出我的正確方向,或者讓我知道我可以如何改進這個問題。 –

+2

我不知道300x。我在16位程序集中創建了一個72位整數,沒有明顯差異,但是我的計算不需要幾天的時間。 – ChiefTwoPencils

+0

@BobbyDigital - 謝謝Bobby。 –

回答

2

根據您提供的信息,除MPFR之外我沒有看到任何其他解決方案。是的,硬件浮點提前給出結果,但這是錯誤的結果。

你需要選擇一個精度來做計算。你的問題看起來好像你只關心最終結果的精確度,但實際上,每次操作都會失去準確性,如果你想要決定什麼樣的整數,這些損失的累積影響必須小於0.5是最終的答案。您可能需要選擇比表示最終結果足夠高的精度。

估計所需精度的兩種方法是事先數字分析和區間算術。我對數值分析一無所知,但基本原理是,每個非理性因子都用一個多精度浮點數表示,我們假設該距離小於0.5,並且每個乘法可能爲0.5 ULP,遠離實際結果(實際浮點操作數的乘積,而不是操作數應該表示的乘積)。人們發現在相對精度方面推理更簡單。

區間算術使操作次數增加一倍,但爲實際結果提供了有保證的界限。如果在計算的時間間隔內只有一個整數,那麼做得好!否則,以更高的精度重新開始。

最後,你問速度。如果你真的只有乘法,那麼並行化計算是微不足道的,因爲乘法是關聯的。

+0

謝謝帕斯卡。我非常感謝您對上述有關四倍與GMP相對優點的評論。 –