Entendendo as convenções de sinal
As duas convenções produzem resultados idênticos sempre que os dois números são positivos, mas divergem assim que aparece um valor negativo, como mostrado abaixo.
| a | b | Resultado pelo piso (sinal de b) | Resultado por truncamento (sinal de a) |
|---|---|---|---|
| 13 | 5 | 3 | 3 (igual — ambos positivos) |
| −13 | 5 | 2 | −3 |
| 13 | −5 | −2 | 3 |
| −13 | −5 | −3 | −3 (igual — ambos negativos) |
- O módulo pelo piso (usado aqui como resultado principal) é a convenção mais comum na matemática pura e na teoria dos números, e coincide com o operador % nativo do Python.
- O módulo por truncamento (exibido como resultado secundário) coincide com o operador % nativo de JavaScript, C, C++, Java e da maioria das linguagens da família C, nas quais o sinal do resto segue o dividendo.
- O módulo por zero é indefinido e não é calculado por esta calculadora; o divisor precisa ser um número diferente de zero.
O que é a operação módulo?
A operação módulo, escrita a mod b (ou a % b), devolve o resto da divisão de a por b. Por exemplo, 13 mod 5 = 3, porque 13 = 2 × 5 + 3 — dividir 13 por 5 dá quociente 2 e sobram 3. O módulo é fundamental na teoria dos números (aritmética modular, ou “do relógio”), na computação (hashing, indexação cíclica, somas de verificação) e no raciocínio cotidiano sobre restos e ciclos (como dias da semana ou horas do relógio).
Existem duas convenções amplamente usadas para definir o sinal do resultado quando há números negativos: o módulo pelo piso, em que o resultado tem sempre o mesmo sinal do divisor b, e o módulo por truncamento, em que o resultado tem sempre o mesmo sinal do dividendo a. As duas são definições matematicamente válidas de “resto” e coincidem exatamente sempre que a e b são positivos; elas só divergem quando há um valor negativo envolvido.
A escolha da convenção importa na prática porque diferentes linguagens de programação adotam padrões diferentes: o operador % do Python usa o módulo pelo piso, ao passo que JavaScript, C, C++, Java e a maioria das linguagens da família C usam o módulo por truncamento (acompanhando o sinal do dividendo). Esta calculadora informa os dois resultados explicitamente, para que qualquer uma das convenções possa ser lida diretamente.
Como usar esta calculadora de módulo
- Informe o dividendo (a) — o número que está sendo dividido.
- Informe o divisor (b) — o número pelo qual você divide. O divisor não pode ser 0, já que a divisão (e o módulo) por zero é indefinida.
- Leia o resultado pela convenção do piso (o sinal acompanha sempre o divisor) — a convenção matemática mais comum na teoria dos números.
- Compare com o resultado por truncamento (o sinal acompanha sempre o dividendo) se você precisa reproduzir o operador % nativo de alguma linguagem, e confira o quociente e a equação completa da divisão para ver o passo a passo.
As fórmulas do módulo pelo piso e por truncamento
O módulo pelo piso define o quociente como q = ⌊a ÷ b⌋ (arredondado para baixo, em direção a menos infinito) e depois r = a − b×q. Isso garante que o resto r tenha sempre o mesmo sinal do divisor b (ou seja 0) e satisfaça 0 ≤ r < |b| quando b > 0. Exemplo resolvido: 13 mod 5: q = ⌊13/5⌋ = 2, r = 13 − 5×2 = 3.
Exemplo resolvido com dividendo negativo: −13 mod 5 (piso): q = ⌊−13/5⌋ = ⌊−2,6⌋ = −3, r = −13 − 5×(−3) = −13 + 15 = 2. Repare que o resultado é positivo (acompanhando o divisor positivo), o que difere do resultado por truncamento abaixo.
O módulo por truncamento define o quociente arredondando em direção a zero, em vez de em direção a menos infinito, e depois calcula o resto da mesma forma; isso garante que o resto tenha sempre o mesmo sinal do dividendo a (ou seja 0). Exemplo resolvido: −13 mod 5 (truncamento, o resultado de % em JavaScript/C/Java): o quociente arredonda −2,6 em direção a zero, virando −2, portanto r = −13 − 5×(−2) = −13 + 10 = −3 — negativo, acompanhando o dividendo negativo, ao contrário do +2 obtido pelo piso com as mesmas entradas.
Erros comuns
- Supor que todas as linguagens de programação calculam a mod b da mesma forma com números negativos — JavaScript, C, C++ e Java usam o módulo por truncamento, ao passo que Python e muitos textos de matemática usam o módulo pelo piso, e os resultados diferem sempre que a é negativo.
- Esquecer que o resultado pelo piso acompanha sempre o sinal do divisor, e não o do dividendo — o oposto do que a convenção por truncamento (estilo JavaScript) entrega.
- Tentar calcular a mod 0 — a operação módulo, assim como a divisão, é indefinida quando o divisor é zero.
- Usar entradas não inteiras esperando aritmética modular de inteiros — esta calculadora aceita números reais e aplica a mesma lógica de piso e truncamento, mas muitas propriedades clássicas da aritmética modular (como a do relógio) são definidas especificamente para inteiros.
Perguntas frequentes
Qual é a diferença entre módulo pelo piso e por truncamento?
O módulo pelo piso arredonda o quociente em direção a menos infinito, portanto o resto tem sempre o sinal do divisor. O módulo por truncamento arredonda o quociente em direção a zero, portanto o resto tem sempre o sinal do dividendo. Eles coincidem quando os dois números são positivos, mas diferem quando algum é negativo — por exemplo, −13 mod 5 vale 2 pela convenção do piso e −3 pela do truncamento.
Por que −13 mod 5 dá respostas diferentes em calculadoras diferentes?
Depende da convenção de sinal adotada. O módulo pelo piso dá 2 (o resultado acompanha o sinal positivo do divisor e satisfaz 0 ≤ r < 5). O módulo por truncamento dá −3 (o resultado acompanha o sinal negativo do dividendo). O operador % do Python devolve 2 (piso); os de JavaScript, C e Java devolvem −3 (truncamento). Nenhum é “mais correto” — são duas definições matemáticas distintas e igualmente válidas.
Como calcular a mod b à mão?
Divida a por b para obter o quociente, arredonde-o segundo a convenção escolhida (para baixo no piso, em direção a zero no truncamento) e depois subtraia de a o produto de b pelo quociente arredondado: resto = a − b × quociente. Para 13 mod 5: 13 ÷ 5 = 2,6, que arredonda para quociente 2 nas duas convenções, portanto o resto = 13 − 5×2 = 3.
O que significa mod na aritmética modular e na aritmética do relógio?
A aritmética modular trata os números como se eles “dessem a volta” ao chegar ao módulo — o exemplo clássico é o relógio de 12 horas, em que o tempo é calculado mod 12 (ou mod 24 no formato de 24 horas). Por exemplo, 15 horas no formato de 24 horas correspondem a 15 mod 12 = 3 no mostrador de 12 horas. O módulo é justamente a operação que produz esse resto “dado a volta”.
Dá para calcular o módulo com divisor negativo?
Sim. Pela convenção do piso, a mod b (com b negativo) produz um resto com o mesmo sinal de b — por exemplo, 13 mod −5 = −2, já que 13 = (−3)×(−5) + (−2). Pela convenção do truncamento, o resto acompanha o sinal do dividendo: 13 mod −5 = 3, porque o quociente arredonda em direção a zero, virando −2, o que dá 13 − (−5)×(−2) = 13 − 10 = 3.
Referências
- Rosen KH. Elementary Number Theory and Its Applications. 6th ed. Pearson, 2010. (Division algorithm and modular arithmetic.)
- Leijen D. Division and Modulus for Computer Scientists. Utrecht University Technical Report UU-CS-2001-20, 2001. (Formal comparison of flooring, truncating and Euclidean division conventions.)
- ECMA International. ECMA-262: ECMAScript Language Specification — the remainder operator (%). ecma-international.org.