Добрый день. Приветствую а моём канале 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 #языки программирования