浮点运算中的结合性
浮点运算用于表示计算中的实数。由于内部舍入错误,浮点运算的结合性可能存在问题。
问题:
考虑以下代码,将三个浮点数相加并进行比较它们的总和为 1:
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+y)+z x+(y+z)
其中 x = 1e30、y = -1e30 和 z = 1。第一个表达式的计算结果为 1,而第二个表达式的计算结果为 0。
以上是为什么浮点加法会根据运算顺序产生不同的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!