Menos diecisiete módulo cinco tiene dos respuestas distintas
Publicado el 16/10/2026 · 4 min de lectura · Herramientas para desarrolladores
Daniel Okonkwo — Desarrollador front-end y redactor de Tecnología en OneKitly
Rendimiento web · Formatos de archivo
Verificado con 2 fuentes
El resto de 17 dividido por 5 vale 2 y nadie lo discute. Dale un dividendo negativo y la respuesta se parte, porque los lenguajes discrepan sobre el cociente y no sobre el resto: −17 ÷ 5 vale o bien −3 con resto −2, o bien −4 con resto 3, y ambos satisfacen la identidad de que el cociente por el divisor más el resto devuelve el dividendo. Los lenguajes que truncan el cociente hacia cero — JavaScript, C, Java, Go — devuelven −2 y dan al resto el signo del dividendo. Los que toman la parte entera inferior — Python, Ruby, y la función MOD de una hoja de cálculo — devuelven 3 y dan al resto el signo del divisor. Esta calculadora sigue la primera convención.
17 mod 5 vale 2 en todas partes. −17 mod 5 vale −2 en JavaScript, C y Java, y 3 en Python, Ruby y una hoja de cálculo. Ambos son correctos, y la diferencia es un error real.
El error siempre tiene el mismo aspecto
Hacer que un índice dé la vuelta a un array es el caso de escuela. Avanzar con (i + 1) % n se porta perfectamente, así que nadie lo piensa dos veces antes de escribir (i − 1) % n para el otro sentido — y en un lenguaje que trunca eso devuelve −1 cuando i vale 0, lo que no indexa nada y aflora tres pantallas más allá como una diapositiva vacía de carrusel o un fallo en un reductor. El remedio es el conjuro estándar ((i − 1) % n + n) % n, que fuerza el resultado positivo en cualquier lenguaje: para n = 5 e i = 0 da 4, el último elemento, que es lo que dar la vuelta hacia atrás debía significar. Escríbelo una vez en una función auxiliar y deja de pensarlo.
El módulo es la aritmética de todo lo que cicla
Relojes, días de la semana, ruedas de color, buffers circulares y tablas hash viven de él, y también el dígito de control del dorso de una tarjeta bancaria. Allí donde un valor tiene que volver al principio, es el resto quien lo trae de vuelta — y leer un divisor como «cuántas horas tiene esta esfera» vuelve evidente de un vistazo la mayor parte del código con módulo. También explica por qué la cuestión del signo pesa tanto en la práctica: un reloj que marca las −2 no se equivoca, simplemente no le han dicho que esta esfera solo muestra números del 0 al 4.
| Expresión | Truncado (JS, C, Java) | Parte entera inferior (Python, Ruby, MOD) |
|---|---|---|
| 17 mod 5 | 2 | 2 |
| −17 mod 5 | −2 | 3 |
| 17 mod −5 | 2 | −3 |
Ejemplo calculado con nuestra herramienta
Calculadora de módulo
Datos
- Dividendo
- 9
- Divisor
- 3
Resultado
- Resto (a mod b)
- 0
- Cociente
- 3
Estas cifras las produce la calculadora de abajo, no se escriben a mano — se recalculan cada vez que la herramienta cambia.
Rehacerlo con tus cifras →Preguntas frecuentes
- ¿Qué hace con decimales?
- Sigue funcionando — el resto de 17,5 entre 5 es 2,5 — pero la coma flotante binaria vuelve poco fiable el resultado en los bordes. Valores que parecen exactos en decimal no lo son en binario, así que una expresión que debería caer en cero puede caer en un número positivo minúsculo o en el propio divisor, y una prueba de «¿es cero el resto?» falla entonces con números que dividen a ojos vistas. Cuando esa comprobación importa, pasa antes a enteros — trabaja en céntimos en vez de en euros, en milisegundos en vez de en segundos — y mantén el módulo del todo apartado de la coma flotante.
- ¿Qué convención preferir?
- La de la parte entera inferior, siempre que puedas elegir. Un resto que lleva siempre el signo del divisor se queda dentro del intervalo que de verdad quieres cuando el divisor es positivo, es decir en casi todos los usos prácticos, y hace innecesaria la función de vuelta. La convención truncada existe sobre todo porque el hardware de los inicios dividía así y C siguió al hardware; sobrevive por inercia y compatibilidad, no por mérito. Como rara vez eliges el lenguaje, la costumbre útil es sencillamente comprobar en cuál estás antes de escribir un módulo sobre algo que pueda ponerse negativo.
Artículos que podrían interesarte
Todas las guías →Herramientas relacionadas
Fuentes
¿Has detectado un error en este artículo?