正如预期的那样,由于其有限精度,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
但是加法是可交换的吗?乘法?
最佳答案
是的,加法和乘法是可交换的(除了当结果为 NaN 时,但那是因为 NaN != NaN。在这种情况下加法和乘法产生相同的结果,只是这个结果不等于它本身)。
有限浮点值的加法和乘法都被定义为最接近各自运算的数学结果的浮点值。 即分别为 rn(a + b) 和 rn(a * b)。
这些定义是可交换的,因为 a +
b = rn(a + b) = rn (b + a) = b +
a (乘法也类似)。
关于Python 浮点算术基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27743900/