首页 >后端开发 >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