Muitas linguagens de programação possuem um operador "restante" que pode ser usado como um operador de módulo quando ambos os operandos são positivos; o referido operador é freqüentemente chamado de operador "módulo", porque esse é seu uso principal. Os idiomas geralmente têm esse operador, porque o hardware de divisão de muitas plataformas de hardware fornece automaticamente um restante ao executar uma divisão, e computar um restante ou módulo por qualquer outro meio seria muito mais difícil.
Não conheço o histórico de suporte de hardware para divisão assinada; muitos processadores fornecem há anos hardware que pode executar automaticamente uma divisão assinada, sujeito à regra de que, se a / b produzir (q, r), -a / b ou a / -b produzirá (-q, -r), mas Não tenho certeza dos casos de uso em que a divisão usando essa regra é particularmente útil. Em quase todos os casos em que usei operações de divisão inteira ou "módulo" em valores negativos, eu queria infinito arredondado em direção ao infinito negativo na divisão e uma verdadeira operação de módulo (de modo que (a + b) / b sempre igual (a / b) +1 e (a + b)% b sempre seria igual a% b.). Como os operadores não funcionam dessa maneira, é necessário testar o sinal do dividendo e usar código diferente quando ele ' s negativo - negando essencialmente qualquer benefício de ter uma instrução de divisão assinada em primeiro lugar. Estou curioso para saber quais propósitos o suporte à divisão de assinaturas no hardware é realmente útil.
Retornando à pergunta original, o operador do módulo é frequentemente útil em situações em que certas coisas devem acontecer periodicamente, no espaço (por exemplo, coordenadas gráficas) ou no tempo. Por exemplo, se alguém deseja que um evento ocorra a cada 15 segundos, o tempo até o próximo evento será 15 - ((time_now - time_of_an_occurrence)% 15), supondo que time_of_an_occurrence
não seja maior quetime_now
. Se time_of_an_occurrence
fosse maior que time_now
, um operador de módulo poderia continuar usando a mesma fórmula, desde que a subtração não transbordasse, mas o operador restante exigirá uma fórmula diferente.