Как реализован оператор подразделения 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;
}
Другие вопросы по тегам