Другие языки программирования и технологии

Почему Pascal считает 10 mod -6 = 4, когда правильно -2?

ну может со мной и может поспорить Паскаль, но с Гуглом - вряд ли
Сам по себе остаток от деления определяется очень просто: если
p = a div b
то
a mod b = a - b * p

А вот дальше начинается самое интересное: в вычислительной математике есть ДВА основных варианта целочисленного деления:

1. Округление к 0:
4 div 3 = 1 => 4 mod 3 = 4 - 3 * 1 = 4 - 3 = 1
-4 div 3 = -1 => -3 mod 3 = -4 - 3 * -1 = 3 - 4 = -1
4 div -3 = -1 => 4 mod -3 = 4 - -3 * -1 = 4 - 3 = 1
-4 div -3 = 1 => -4 mod -3 = -4 - -3 * 1 = 3 - 4 = -1
Этот вариант реализуется простым отбрасыванием дробной части частного и обеспечивает независимость абсолютного значения результатов от знаков операндов. Он удобен тем, что симметричен относительно 0, но при этом не обеспечивает равномерность деления: если для p <> 0 существует ровно b чисел, дающих a div b = p, то для a div b = 0 кол-во таких чисел равно 2 * b - 1.

2. Округление к минус бесконечности (результат всегда округляется вниз):
4 div 3 = 1 => 4 mod 3 = 4 - 3 * 1 = 4 - 3 = 1
-4 div 3 = -2 => -4 mod 3 = -4 - 3 * -2 = 6 - 4 = 2
4 div -3 = -2 => 4 mod -3 = 4 - -3 * -2 = 4 - 6 = -2
-4 div -3 = 1 => -4 mod -3 = -4 - -3 * 1 = 3 - 4 = -1
Этот вариант обеспечивает равномерность деления по всей числовой оси, но абсолютное значение результатов зависит от знаков операндов.

В разных языках используются разные правила целочисленного деления и, соответственно, получаются разные остатки. Например, стандарт Forth-79 требует округление к 0, а стандарт Forth-83 - к минус бесконечности.

P.S. Pascal появился лет за 30 лет до Google, так что кто с кем спорит - большой вопрос.
Сергей Вдовин
Сергей Вдовин
73 684
Лучший ответ
с математикой плохо\
подели 10 на 6 в столбик
Абзал Абдрахманов может суть функции "mod" вовсе не modulus?
Абзал Абдрахманов Ахах ещё очепяткп
MODULO
теперь без опечаток
Абзал Абдрахманов а давай на -6
https://en.m.wikipedia.org/wiki/Modulo_operation
это не деление с остатком
это деление по модулю (хотя походу у Паскаля это просто деление с остатком и в результат пихает знак исходного числа)
Остаток от деления должен быть неотрицательным числом (с) Wikipedia
Евгений Узлов
Евгений Узлов
90 630
Удивительно, но Pascal считает правильно.
10 = -6 b + r ; 0 <= r < 6
b = -1 ; r = 4

Условие 0 <= r < 6 соблюдается не всеми. p.s. 4 - 6 = -2
Denис Осипов
Denис Осипов
27 070
Абзал Абдрахманов деление с остатком это операция remainder (хз как она в паскале)
а это вроде как операция modulo (я так думаю. Все же mod гораздо ближе к modulo, чем к remainder)
делимое, делитель, частное и остаток. mod в паскале это остаток от деления. abs() возвращает модуль числа. Не путаем. Теперь что конкретно по данным числам: вот я разделил в столбик числа и получил 4 в остатке.
Операция mod и остаток от деления это не одно и то же. См. статью https://habr.com/ru/post/421071/