1 / a * a和1 * a / a之间的差异

时间:2016-12-18 06:08:57

标签: c++ variables

a=99.0 cout<<(1.0/a*a==1.0)给0

,而

cout<<(1*a/a==1.0)给1 和 cout<<(1.0/99.0*99.0==1.0)也给1

他们背后的理由是什么? 为什么我改变变量的顺序或当我将它改为实数时, 结果会改变吗?

1 个答案:

答案 0 :(得分:1)

浮点数具有有限数量的精度位。

考虑这个例子(在基数10中,为了便于解释,有5个小数位)a3.0

第一种情况:1.0 / 3.0 * 3.0

这里首先计算除法(1.0 / 3.0),给出中间值0.33333。

然后进行乘法:0.33333 * 3 = 0.99999,其不同于1.0

第二种情况:1.0 * 3.0 / 3.0

在这种情况下,首先执行乘法(1.0 * 3.0),给出一个3.0的中间值,除以3.0,恰好为1.0

正如其他人所说,由于这种影响,将浮点值与==完全比较并不是一个好主意。