首頁 >後端開發 >C++ >浮點加法是否具有結合律?

浮點加法是否具有結合律?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-25 17:16:13313瀏覽

Is Floating-Point Addition Associative?

浮點運算的結合性

在程式設計領域,浮點數通常用來表示實數。然而,這些浮點數值的加法和乘法的基本運算可能並不總是如預期的那樣。

常出現的一個問題是浮點加法和乘法是否具有關聯性。結合性意味著操作數相加或相乘的順序不會影響最終結果。雖然乘法對於浮點數確實具有關聯性,但加法則不然。

觀察以下程式碼時,這種關聯性的缺乏變得很明顯:

cout << ((0.7 + 0.2 + 0.1) == 1) << endl;     //output is 0
cout << ((0.7 + 0.1 + 0.2) == 1) << endl;     //output is 1

這種令人費解的行為是由固有的不精確性引起的浮點數。當增加多個數字時,由於舍入錯誤,執行加法的順序可能會導致結果略有不同。

開創性論文「每個電腦科學家應該了解浮點運算」闡明了這個問題:

「另一個灰色區域涉及括號的解釋。由於舍入誤差,代數結合律不一定成立例如,當x = 1e30、y = -1e30 且z = 1 時,表達式(x y) z 的答案與x (y z) 完全不同(前一種情況為1,後一種情況為0)。

以上是浮點加法是否具有結合律?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn