Python 浮点数类型的精度问题

精度损失

在 Python 中,浮点数表示的精度有限,当我们对大数进行运算时,如果所得的结果是以浮点数表示的,就需要考虑到结果的精度损失问题

>>> a = 1234567890987654321
>>> a / 3
4.115226303292181e+17

所以如果确定所有的计算过程都只需要用到整数的话,我们可以采用 地板除 来代替真除,从而使得除法结果也是整数类型避免精度损失。(注意此时只有运算符两边都是整数类型时,结果才会是整数类型,否则都是浮点数类型)

>>> a = 1234567890987654321
>>> a // 3
411522630329218107
>>>
>>> a = 1234567890987654321
>>> a // 3.0
4.115226303292181e+17
>>>
>>> a = 1234567890987654321
>>> a // int(3.0)
411522630329218107

可以看到,浮点数类型的结果相比于整数类型结果而言丢失了最后两位数字!

原文地址:https://www.cnblogs.com/USTC-manker/p/13585386.html