正如预期的那样,由于其有限的精度,Python的浮点乘法不是对加法的分配:
In [10]: 200 * 0.1 + 200 * 0.2
Out[10]: 60.0
In [11]: 200 * (0.1 + 0.2)
Out[11]: 60.00000000000001
添加不是关联的:
In [12]: 1e14 + (48.18 + 18.26)
Out[12]: 100000000000066.44
In [13]: (1e14 + 48.18) + 18.26
Out[13]: 100000000000066.45
但是加法可交换吗?乘法?
答案 0 :(得分:2)
是的,加法和乘法是可交换的(除了结果是NaN时,但那是因为NaN!= NaN。在这种情况下,加法和乘法产生相同的结果,只是这个结果不等于它自己)。
有限浮点值的加法和乘法都被定义为最接近相应操作的数学结果的浮点值。 即,分别是rn(a + b)和rn(a * b)。
这些定义是可交换的,因为+
b = rn(a + b)= rn(b + a)= b +
a(类似于乘法)。