Как реализован оператор подразделения Python Floor?
Я знаю, как работает оператор //, но что происходит за кулисами?
Что я действительно хочу знать: подвержены ли ошибки точности с плавающей запятой даже при работе исключительно с целыми числами?
2 ответа
Решение
Python не использует арифметику с плавающей точкой при расчете a // b
(для целых чисел a, b). Реализация классического алгоритма длинного деления для вычисления коэффициента и остатка при делении a
а также b
,
Фактическое деление на большие целые числа реализовано в x_divrem()
который находится в longobject.c.
Это реализация C разделения полов Python (когда
b
положительный):
int py_floor_div(int a, int b)
{
if (a >= 0)
return a / b;
return (a - b + 1) / b;
}