python 楼层除法运算符是如何实现的?
How is the python floor division operator implemented?
我知道 // 运算符是如何工作的,但幕后发生了什么?
我真正想知道的是:即使只对整数进行运算,它也会出现浮点精度错误吗?
Python 在计算 a // b
时不使用浮点运算(对于 a、b 整数)。经典长除法算法的实现,计算除a
和b
时的商和余数。
大整数的实际除法在 x_divrem()
中实现,可在 longobject.c 中找到。
这是 Python 楼层除法的 C 实现(当 b
为正时):
int py_floor_div(int a, int b)
{
if (a >= 0)
return a / b;
return (a - b + 1) / b;
}
我知道 // 运算符是如何工作的,但幕后发生了什么?
我真正想知道的是:即使只对整数进行运算,它也会出现浮点精度错误吗?
Python 在计算 a // b
时不使用浮点运算(对于 a、b 整数)。经典长除法算法的实现,计算除a
和b
时的商和余数。
大整数的实际除法在 x_divrem()
中实现,可在 longobject.c 中找到。
这是 Python 楼层除法的 C 实现(当 b
为正时):
int py_floor_div(int a, int b)
{
if (a >= 0)
return a / b;
return (a - b + 1) / b;
}