Menos dezassete módulo cinco tem duas respostas diferentes
Publicado a 16/10/2026 · 4 min de leitura · Ferramentas para programadores
Daniel Okonkwo — Programador front-end e redator de Tecnologia na OneKitly
Desempenho web · Formatos de ficheiro
Verificado a partir de 2 fontes
O resto de 17 dividido por 5 vale 2 e ninguém discute. Dá-lhe um dividendo negativo e a resposta parte-se, porque as linguagens divergem quanto ao quociente e não quanto ao resto: −17 ÷ 5 vale ou −3 com resto −2, ou −4 com resto 3, e ambos satisfazem a identidade de que o quociente vezes o divisor mais o resto devolve o dividendo. As linguagens que truncam o quociente para zero — JavaScript, C, Java, Go — devolvem −2 e dão ao resto o sinal do dividendo. As que tomam a parte inteira inferior — Python, Ruby, e a função MOD de uma folha de cálculo — devolvem 3 e dão ao resto o sinal do divisor. Esta calculadora segue a primeira convenção.
17 mod 5 vale 2 em toda a parte. −17 mod 5 vale −2 em JavaScript, C e Java, e 3 em Python, Ruby e numa folha de cálculo. Ambos estão certos, e a diferença é um erro real.
O erro tem sempre o mesmo aspeto
Fazer um índice dar a volta a um array é o caso de escola. Avançar com (i + 1) % n comporta-se na perfeição, pelo que ninguém pensa duas vezes antes de escrever (i − 1) % n para o outro sentido — e numa linguagem que trunca isso devolve −1 quando i vale 0, o que não indexa nada e aflora três ecrãs adiante como um slide vazio de carrossel ou uma falha num redutor. O remédio é o encantamento padrão ((i − 1) % n + n) % n, que força o resultado positivo em qualquer linguagem: para n = 5 e i = 0 dá 4, o último elemento, que é o que dar a volta para trás devia significar. Escreve-o uma vez numa função auxiliar e deixa de pensar nisso.
O módulo é a aritmética de tudo o que cicla
Relógios, dias da semana, rodas de cor, buffers circulares e tabelas de dispersão vivem dele, e o dígito de controlo no verso de um cartão bancário também. Onde quer que um valor tenha de voltar ao início, é o resto que o traz de volta — e ler um divisor como «quantas horas tem este mostrador» torna evidente à primeira vista a maior parte do código com módulo. Explica também porque a questão do sinal pesa tanto na prática: um relógio que marca −2 horas não está errado, apenas não lhe disseram que este mostrador só mostra números de 0 a 4.
| Expressão | Truncado (JS, C, Java) | Parte inteira inferior (Python, Ruby, MOD) |
|---|---|---|
| 17 mod 5 | 2 | 2 |
| −17 mod 5 | −2 | 3 |
| 17 mod −5 | 2 | −3 |
Exemplo calculado com a nossa ferramenta
Calculadora de módulo
Dados
- Dividendo
- 9
- Divisor
- 3
Resultado
- Resto (a mod b)
- 0
- Quociente
- 3
Estes números são produzidos pela calculadora abaixo, não escritos à mão — são recalculados sempre que a ferramenta muda.
Refazer com os teus números →Perguntas frequentes
- O que faz com decimais?
- Continua a funcionar — o resto de 17,5 por 5 é 2,5 — mas a vírgula flutuante binária torna o resultado pouco fiável nos limites. Valores que parecem exatos em decimal não o são em binário, pelo que uma expressão que devia cair em zero pode cair num número positivo minúsculo ou no próprio divisor, e um teste de «o resto é zero?» falha então com números que dividem à vista. Quando essa verificação conta, passa antes a inteiros — trabalha em cêntimos em vez de em euros, em milissegundos em vez de em segundos — e mantém o módulo inteiramente longe da vírgula flutuante.
- Que convenção preferir?
- A da parte inteira inferior, sempre que possas escolher. Um resto que leva sempre o sinal do divisor fica dentro do intervalo que realmente queres quando o divisor é positivo, ou seja em quase todos os usos práticos, e torna desnecessária a função de retorno. A convenção truncada existe sobretudo porque o hardware dos primórdios dividia assim e o C seguiu o hardware; sobrevive por inércia e compatibilidade, não por mérito. Como raramente escolhes a linguagem, o hábito útil é simplesmente verificar em qual estás antes de escrever um módulo sobre algo que possa ficar negativo.
Artigos que podem interessar-lhe
Todos os guias →Ferramentas relacionadas
Fontes
Detetaste um erro neste artigo?