2015-11-28 28 views
2

當我使用GCC並使用double值進行計算時會發生什麼。在x64平臺上的GCC默認擴展精度?

GCC使用上(我假定這裏x64平臺) https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options

-mfpmath=sse (default) (use sse instructions) 
-mpc80  (default) (rounding mode to 80bit extended precision) 

我很困惑,當我用64位在一個簡單的C++程序double值。 是現在執行的擴展精度計算(因爲mpc80默認開啓)還是使用sse指令(其中沒有擴展精度的內容)

究竟發生了什麼?我需要在64位平臺上做些什麼,以確保在某些部分代碼中僅使用「雙精度」,因此假設GCC默認進行80位擴展精度計算,那麼我需要設置FPU單元手動在這部分代碼中「雙精度」?

回答

2

否。在64位模式下,使用SSE指令。 -mpc80(以及其他類似選項)僅適用於32位系統。 (AFAIK)

如果您想確定,請執行運行時精確檢查。

一般來說,您不應該依賴任何精度,儘管您通常可以認爲double實際上是雙精度。

+0

感謝您的回覆,在文檔中對此沒有任何說法,? 我需要依賴精度,因爲Shewchuk的幾何謂詞 https://www.cs.cmu.edu/~quake/robust.html – Gabriel

+0

唉,我不打算讀這篇論文。 [你試過這個答案嗎?](http://stackoverflow.com/a/1076218/2706707) –

+0

@Gabriel - 當你在行列式或內積中使用超過2個術語作爲'運行總和'時,您可能需要調查[Kahan求和](https://en.wikipedia.org/wiki/Kahan_summation_algorithm)以減輕取消錯誤等。在實現任意精度或區間算法之前,這可能已足以滿足您的需求。 –