Найти в Дзене
programmer's notes (python and more)

Заметки по поводу деления нацело в языке программирования Python. Приложение к уроку 2

Добрый день. Приветствую а моём канале programmer's notes.

programmer's notes

Это заметки являются приложением к уроку 2 программирования на python.

Вопрос о деление нацело и получение остатка от деления на самом деле не праздный. Потому, что если вы попробуете получить частное ( у математиков это называют неполным частным.) от деления на множестве целых чисел, если делимое или делитель (одно из них) отрицательное, то сильно удивитесь. Но обо всем по порядку.

В общем случае, когда говорят о делении нацело, речь идет о решении вот такого уравнения (в целых числах)

a = b * x + y

Здесь a - делимое, b - делитель, x - то самое не полное частное, y - остаток. В общем случае решений множество. Действительно, пусть a=10, b=3. Какие подойдут решения?

x=1, y=7
x=2, y=4
x=3, y=1
x=4, y=-2
x=5, y=-5

и так то бесконечности. В программировании используется два алгоритма получения неполного частного и остатка от деления. Причем языки разделились на две группы, в одних принят один алгоритм, в других - другой.

Два антипода - язык Python и язык Си. Будем называть это алгоритм 1 и алгоритм 2. И так

1-й.
Делимое делится на делитель обычным способом, т.е. в общем случае получается вещественное число. Затем происходит округление в сторону -∞. При этом знак остатка совпадает со знаком делителя.

2-й.
Делимое делится на делитель обычным способом, т.е. в общем случае получается вещественное число. Затем происходит округление в сторону 0. При этом знак остатка совпадает со знаком делимого.

Давайте рассмотрим примеры.

Пусть 10 делится на 3. Результат деления 3.3333.

Первый алгоритм.
Округление в сторону
-∞ дает 3. Остаток от деления 1.

Второй алгоритм.
Округление в сторону
0 дает 3. Остаток от деления 1.

Оба алгоритма дали один и тот же результат. Для положительных целых чисел это так.

Теперь пусть -10 делится на -3. Результат деления 3.3333. Легко видеть, что оба алгоритма дадут один и тот же результат 3 и -1.

Рассмотрим теперь ситуацию, когда делимое и делитель имеют разные знаки.

Пусть 10 делится на -3. Результат деления -3.3333.

Первый алгоритм.
Округление в сторону
-∞ дает -4. Для остатка получаем -2.

Второй алгоритм.
Округление в сторону
0 дает -3. Остаток будет 1.

Пусть -10 делится на 3. Результат деления -3.3333.

Первый алгоритм.
Округление в сторону
-∞ дает -4. Для остатка получаем 2.

Второй алгоритм.
Округление в сторону
0 дает -3. Остаток будет -1.

Как видим, если делимое и делитель имеют разные знаки, то результат для двух алгоритмов разный.

Я надеюсь, теперь вы не будете удивлены необычными результатами деления нацело и получения остатка от деления.

Для полноты картины проверьте здесь написанное на Python и Си.

Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Люблю чёрно-белые фотографии, а писать программы на черном фоне
Люблю чёрно-белые фотографии, а писать программы на черном фоне

#программирование #программисты #python #языки программирования

programmer's notes