我想在gcc/Linux移植版本的Windows軟件中實現完全相同的浮點結果。出於這個原因,我希望所有的雙重操作都是64位精度。這可以使用例如-mpc64或-msse2或-fstore-floats(全部帶有副作用)來完成。然而,我無法解決的一件事是超驗函數,如sin/asin等。文檔說,他們內部期望(並使用我認爲)的長雙精度,無論我做什麼,他們產生的結果都與Windows相同。gcc和sin/cos /超越函數在Windows中的精確度如下
這些函數如何使用64位浮點精度計算結果?
更新:我錯了,它是printf(「%。17f」),錯誤地舍入正確的雙重結果,gdb中的「print x」顯示數字本身是正確的。我想我需要一個關於這個問題的不同問題......也許關於如何讓printf不把內部對象看作擴展對象。也許使用stringstream會給出預期的結果......是的。
您是否使用Microsoft的編譯器編譯Windows的所述軟件?什麼是編譯選項w.r.t.浮點?這裏有幾個選項,請參閱'精確'的[Microsoft Visual C++浮點優化](http://msdn.microsoft.com/en-us/library/aa289157%28v=vs.71%29.aspx) ,「快速」,「嚴格」等。另外,你可以看看這兩個版本的反彙編,看看他們有什麼不同嗎? – 2013-02-25 08:31:21
您可以確定這些函數不是使用標準庫實現者的查找表來實現的嗎? – Bingo 2013-02-25 08:47:20
它是用_precise_編譯的,文檔說:「中間表達式是以默認的53位精度計算的」。至於查找表等,我不知道。但是gcc的文檔說:「請注意,一些數學庫假設默認情況下啓用了擴展精度(80位)浮點操作;這些庫中的例程可能會嚴重損失準確性,通常是通過所謂的」災難性消除「,這個選項[mpc64]用於將精度設置爲小於擴展精度。」 (c)gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html – queen3 2013-02-25 09:08:27