我正在研究一些浮點數字代碼,讓我感到沮喪的是O3優化(GCC 4.8.3)代碼的行爲會產生與O2情況(穩定的情況),並且如預期的那樣結束了數值災難。O2和O3優化的FP代碼之間差別很大的行爲
我看着this thread這可能是相關的,但答案沒有解決我的問題。我知道O3除了O2外,主要是內聯和循環展開。我很確定原因是由於浮點計算部分,因爲在我明確使用該部分的O2優化後,結果看起來很好。
#pragma GCC push_options
#pragma GCC optimize ("O2")
FP computation code (double precision)
#pragma GCC pop_options
所以我的問題是,什麼樣的優化O3確實可以真正使浮點計算的具體差異?
它利用未定義的行爲?有更多的細節嗎? – JVApen
如果'-fno-fast-math'不能解決問題,請發佈一個受影響代碼示例。 (我不認爲*'-O3'打開'-fast-math',但我可能是錯的''-ffast-math'是一種委婉的語言;它可以對浮點數進行廣泛的*點代碼。) – zwol
@zwol但不符合IEEE-754的權利? – lorniper