2013-05-30 45 views
0

我已經確定,VS2010 C庫中exp(double)的Microsoft實現在Win32(即32位x86)和x64平臺上使用不同的算法,儘管我已經爲x86平臺啓用了SSE2並驗證了在exp()中取得SSE2代碼路徑。不幸的是,對於一些操作數,不同的算法產生稍微不同的結果(通過1ul)。在這些情況下,原則上我們都可以接受這些結果,但是在測試過程中,Win32和x64版本之間缺乏一致性對我們來說存在問題。我在哪裏可以找到可以在兩種平臺上使用的exp(double)的一個好的(即精確和快速的)替代實現?我很樂意擁有使用SSE2指令的彙編代碼解決方案,並且我可以將它從32位轉換爲64位或v.v.如有必要。我在哪裏可以找到在x86/x64上使用SSE2指令的exp(double)的良好實現?

回答

0

也許最好依靠編譯器並使用http://www.netlib.org/fdlibm/e_exp.c的exp實現。這是一個準確的實施(1ulp)。編譯sse2,對於x86 x64以及這些平臺上的結果應該完全相同。源代碼不提供使用mulpd(或_mm_mul_pd)和addpd代替mulsd和addss的很多機會。因此彙編代碼解決方案可能不是非常有利可圖的。

相關問題