【发布时间】:2012-05-09 10:54:39
【问题描述】:
我在添加三个浮点值并将它们与 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
为什么这些值会不同?
【问题讨论】:
-
您的示例代码在 commutativity 而非 associativity 方面有所不同。展示关联性的版本是
(0.7 + (0.1 + 0.2)) -
@MattMcNabb: + 是二元运算。对于浮点操作数,它是可交换的,但不是关联的。因此,如果您有两个产生不同结果的表达式,则不能仅通过应用交换性来形成另一个表达式。
-
@tmyklebu 好的,所以当且仅当已知交换性成立时,它才会检查关联性。 (C++ 标准似乎不保证可交换性)。
标签: c++ floating-point multiplication addition associativity