2009-07-15 80 views
3

有沒有一個公開的可用庫,會產生相同的結果爲sin,cos,floor,ceil,exp和32位bit和 64位linux,solaris和其他可能的平臺?平臺無關的數學庫

我正在考慮以下方案:
一)cephes編譯 與gcc -mfpmath=sse每個 平臺上相同的優化水平......但它不是清楚,這是可行的。
b)MPFR但我擔心這會是 太慢。

關於精度(編輯):對於這個特定的應用程序 我真的不需要的東西產生的值是數值上最接近精確值的 。我只需要在所有平臺上的答案 完全相同,os和「bitness」。 被認爲值需要合理(5位數 可能就足夠了)。我很抱歉沒有在我的第一個問題中明確說明 。

我想MAPM或MPFR具有足夠低的精度可能會做 的訣竅,但我希望找到一些沒有 「多精度」機械/味道。無論如何,我會 試一試。

回答

1

你不應該需要一個。因爲他們的計算很簡單,所以floor和ceil將是精確的。

你所關心的是對於像sin,cos和exp這樣的transendentals的最後一位。但是這些都是CPU微碼本身的原生代碼,無論庫如何,都可以始終以高質量完成。但是,舍入因芯片架構而不同。

因此,如果確實需要一個便攜式圖書館,並且您也將通過這樣做放棄巨大的效率。 您可以使用像MAPM這樣的便攜式庫,它不僅可以爲您提供一致的ULP結果,而且可以幫助您定義arbirary精度。

您可以tools like this onethis one.

+0

關於樓層:在cephes中的實現看起來有點複雜(http://www.netlib.org/cephes)。 關於精度:對於有問題的代碼部分,我並不在乎這些函數是否給了我最後幾位的「確切」答案。我只需要答案是一致和合理的。我想MAPM或MPFR的低精度設置可能會訣竅。 Drepper的工具似乎非常有用。謝謝! 我也會考慮不能使用tybor的lib。再次感謝您的信息。 – Carlos 2009-07-15 07:55:56

1

你提到使用SSE檢查你的數學精度。如果你打算只在x86芯片上運行,那麼你期望的不一致究竟是什麼?

至於MPFR,別擔心 - 測試它!順便說一句,如果它足夠被包含在GCC中,那對你來說可能已經足夠了。

+0

我遇到了x86芯片數學的差異,但那是10年前,也許這些差異消失了。 – Nosredna 2009-07-15 02:27:47

1

您想使用MPFR。這個圖書館已經存在多年,並且已經被移植到每個陽光下的平臺上,並且被大量的人們優化。

如果MPFR不足以滿足您的需求,我們將討論完整的自定義ASM實現,​​在這種情況下,考慮在專用硬件中實現它可能更有效。

4

crlibm是正確的工具。早期的海報與它相關。由於正確舍入,如果編譯正確,它將在具有IEEE-754兼容硬件的所有平臺上提供與位相同的結果。它比MPFR快得多。