十进制整数除法的结果是什么?

时间:2019-02-18 06:08:53

标签: python integer-division

我不确定整数除法实际上如何与十进制一起使用。考虑以下Python 3.x上的两个示例:

4/0.4 = 10.0
4//0.4 = 9.0

常规除法得到10,但4除以0.4的整数得到9.0。

您知道整数与十进制相除的行为,为什么结果是这种方式吗?

1 个答案:

答案 0 :(得分:0)

CPython对浮点数的底数除法(作为除数或除数)的实现位于float_floor_div函数中,该函数调用float_divmod函数(该函数实现了divmod函数)进行实际计算,并使用以下代码行:

mod = fmod(vx, wx);
div = (vx - mod) / wx;
...
floordiv = floor(div);

告诉您底数对浮点数的工作方式是首先调用fmod函数以获取除法的余数,从除数vx中减去余数,然后除法除数wx之前将其除以floor,然后在所得商div上应用4 % 0.4函数。

如果您尝试执行0的模运算,则期望它是>>> 4 % 0.4 0.3999999999999998 ,因为4 / 0.4在数学上应为10:

Decimal

您将看到经典的floating error是二进制系统近似十进制数字的方式所固有的。结果是0.4实际上存储为稍大于0.4的东西,您可以通过使用0.4实例化一个高精度>>> from decimal import Decimal >>> Decimal(0.4) Decimal('0.40000000000000002220446049250313080847263336181640625') 对象来进行验证:

float_divmod

这就是为什么4%0.4的余数为0.3999999999999998998而不是0的原因,结果是>>> 4 - 4 % 0.4 3.6 用商来计算商,首先从股息中减去余数,得到:

>>> (4 - 4 % 0.4) / 0.4
9.0

很自然

WebDriver driver;