Почему оператор% называется оператором «модуля», а не оператором «остатка»?

Сегодня на работе у меня был интересный разговор с одним моих коллег. Он был удивлен, когда с ним случилось следующее:

assert(-1 % 10 == -1)  //Expecting 9

Поэтому, когда он пришел, чтобы спросить меня об этом, я сказал ему: «Ну, в этом есть смысл. Когда вы делите -1 на 10, вы получаете 0, а остаётся -1. Его аргумент, однако, заключался в том, что оператор модуля должен соответствовать «всегда положительной» модели.Я провел небольшое исследование и обнаружил, что модуль, о котором он имел в виду, выглядит следующим образом:

Пусть q будет целым частным чисел a и n. Пусть r - остаток. Тогда:

a = n * q + r

Определение , которое использовал я , однако, похоже, является версией модуля Кнута, а именно:

Пусть q будет нижним пределом разделить на n. Пусть r - остаток. Затем:

r = a - n * q

Итак, мой вопрос: почему в стандарте FORTRAN (а затем и в стандарте C) оператор модуля усекается до 0? Мне кажется неправильным называть это «модулем», а не «остатком» (в математике ответ действительно должен быть 9). Связано ли это с тем, как оборудование делает разделение?

Для справки:

TLDR; Является ли аппаратное обеспечение причиной усечения оператора модуля до 0?

22
задан Community 23 May 2017 в 12:24
поделиться