簡體   English   中英

gcc 編譯器是否尊重我的代碼中編寫的表達式形式?

[英]Does the gcc compiler respect the form of expressions as written in my code?

假設我用 c 寫了一個表達式,例如

a = (((b+c) / d) / f) + ((3.14 * e) ) / f) ;

這里 a,b,c,d,e,f 都是雙精度變量。 例如,當我使用帶有一些優化設置的 gcc 編譯器編譯我的代碼時,編譯器是否尊重我編寫的表達式的特定形式,還是修改表達式以使代碼運行得更快? 例如,使用 -O2 優化設置的 gcc 將/可以將上述表達式編譯為

a = ((b+c + 3.14* d * e) / (d*f))

或者它會保持原樣嗎? 我擔心編譯器會改變我的方程的形式,這可能會影響我的表達式的數值穩定性。

編譯器保證生成一個表達式,該表達式產生的結果與編寫公式時的計算結果相同。 這包括表達式可能產生的所有類型轉換、副作用和異常。

特別是,您優化表達式的方法不會通過等效性測試,因為原始表達式中的((b+c) / d)將根據bcd的類型進行評估,這些類型可能是intfloat 另一方面,由於添加了3.14 ,您的第二個(優化)公式會在整個表達式上強制使用double類型。 它還將分子中的e乘以d以補償分母中的d*f ,這可能會產生原始公式中不存在的溢出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM