浮点加法和乘法是否关联?

新手上路,请多包涵

当我添加三个浮点值并将它们与 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

为什么这些值会不同?

原文由 Karen Tsirunyan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 257
1 个回答

浮点加法不一定是关联的。如果您更改添加的顺序,这可能会改变结果。

关于该主题的标准论文是 What Every Computer Scientist Should Know about Floating Point Arithmetic 。它给出了以下示例:

另一个灰色地带涉及括号的解释。由于舍入误差,代数的结合定律不一定适用于浮点数。例如,当 x = 1e30、y = -1e30 和 z = 1 时,表达式 (x+y)+z 与 x+(y+z) 的答案完全不同(前者为 1,后者为 0 )。

原文由 NPE 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏