Многие языки программирования имеют оператор «остаток», который может использоваться как оператор модуля, когда оба операнда положительны; Указанный оператор часто называют оператором «модуль», потому что это его основное использование. В языках, как правило, есть такой оператор, потому что во многих аппаратных платформах аппаратное обеспечение автоматически предоставляет остаток при выполнении деления, и вычисление остатка или модуля с помощью любых других средств будет намного сложнее.
Я не знаю историю аппаратной поддержки для подписанного подразделения; многие процессоры на протяжении многих лет предоставляют аппаратное обеспечение, которое может автоматически выполнять подписанное деление в соответствии с правилом, согласно которому, если a / b даст (q, r), то -a / b или / -b приведут к (-q, -r), но Я не уверен в случаях использования, где деление с использованием этого правила особенно полезно. Почти в каждом случае, когда я использовал целочисленные операции деления или «модуля» для отрицательных значений, я хотел, чтобы округление в сторону отрицательной бесконечности деления и операция истинного модуля (чтобы (a + b) / b всегда равно (a / b) +1 и (a + b)% b всегда будет равно a% b.). Поскольку операторы не работают таким образом, необходимо проверить знак дивиденда и использовать другой код, когда он ' отрицательный - по сути, сводит на нет любую выгоду от наличия в первую очередь подписанной инструкции деления. Мне интересно, для каких целей поддержка аппаратного обеспечения с подписанным разделением действительно полезна.
Возвращаясь к исходному вопросу, оператор модуля часто полезен в ситуациях, когда определенные вещи должны происходить на периодической основе, либо в пространстве (например, в графических координатах), либо во времени. Например, если кто-то хочет, чтобы событие происходило каждые 15 секунд, время до следующего события будет 15 - ((time_now - time_of_an_occurrence)% 15), если предположитьtime_of_an_occurrence
time_now
, что оно не больше, чем . Если значение time_of_an_occurrence
больше чем time_now
, оператор модуля мог бы продолжать использовать ту же формулу, если вычитание не переполняется, но для оператора остатка потребуется другая формула.