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

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

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

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

Пусть q целочисленное отношение a и n. Пусть г будет остаток. Затем:

a = n * q + r

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

Пусть q будет полом деленного на n. Пусть г будет остаток. Затем:

r = a - n * q

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

Для справки:

Википедия о модулеЗапись MSDN об операторе "модуль"
(Да, я понимаю, что это для VS2003 ... Я застрял с ним в настоящее время. Sadface)Изменения оператора модуляНе принимайте положительный остаток ...

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

Ответы на вопрос(3)

Ваш ответ на вопрос