Ir para o conteúdo
OneKitly

Menos dezassete módulo cinco tem duas respostas diferentes

Publicado a 16/10/2026 · 4 min de leitura · Ferramentas para programadores

Daniel Okonkwo

Daniel Okonkwo — Programador front-end e redator de Tecnologia na OneKitly

Desempenho web · Formatos de ficheiro

Verificado a partir de 2 fontes

Ver perfil →
Em resumo

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.

Parte inteira inferior (Python, Ruby, MOD)
A mesma expressão, duas famílias de linguagens
ExpressãoTruncado (JS, C, Java)Parte inteira inferior (Python, Ruby, MOD)
17 mod 522
−17 mod 5−23
17 mod −52−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?