Vai al contenuto
OneKitly

Meno diciassette modulo cinque ha due risposte diverse

Pubblicato il 16/10/2026 · 3 min di lettura · Strumenti per sviluppatori

Daniel Okonkwo

Daniel Okonkwo — Sviluppatore front-end e redattore Tech presso OneKitly

Performance web · Formati di file

Verificato su 2 fonti

Vedi il profilo →
In breve

Il resto di 17 diviso 5 fa 2 e nessuno lo contesta. Dagli un dividendo negativo e la risposta si spacca, perché i linguaggi divergono sul quoziente e non sul resto: −17 ÷ 5 fa o −3 con resto −2, oppure −4 con resto 3, ed entrambi soddisfano l'identità per cui quoziente per divisore più resto restituisce il dividendo. I linguaggi che troncano il quoziente verso zero — JavaScript, C, Java, Go — restituiscono −2 e danno al resto il segno del dividendo. Quelli che arrotondano per difetto — Python, Ruby e la funzione MOD di un foglio di calcolo — restituiscono 3 e danno al resto il segno del divisore. Questo calcolatore segue la prima convenzione.

17 mod 5 fa 2 ovunque. −17 mod 5 fa −2 in JavaScript, C e Java, e 3 in Python, Ruby e in un foglio di calcolo. Entrambi sono giusti, e la differenza è un bug vero.

Il bug ha sempre lo stesso aspetto

Far girare un indice attorno a un array è il caso di scuola. Avanzare con (i + 1) % n si comporta alla perfezione, quindi nessuno ci pensa due volte prima di scrivere (i − 1) % n per l'altro verso — e in un linguaggio che tronca questo restituisce −1 quando i vale 0, il che non indicizza nulla e riemerge tre schermate dopo come diapositiva vuota di carosello o crash in un reducer. Il rimedio è la formula standard ((i − 1) % n + n) % n, che forza il risultato positivo in qualsiasi linguaggio: per n = 5 e i = 0 dà 4, l'ultimo elemento, che è quel che girare all'indietro doveva significare. Scrivila una volta in una funzione di supporto e smetti di pensarci.

Il modulo è l'aritmetica di tutto ciò che cicla

Orologi, giorni della settimana, ruote di colore, buffer circolari e tabelle hash ci vivono, e così la cifra di controllo sul retro di una carta bancaria. Ovunque un valore debba tornare all'inizio, è il resto a riportarcelo — e leggere un divisore come «quante ore ha questo quadrante» rende evidente a colpo d'occhio la maggior parte del codice con modulo. Spiega anche perché la questione del segno pesi tanto in pratica: un orologio che segna le −2 non sbaglia, semplicemente non gli è stato detto che questo quadrante mostra solo numeri da 0 a 4.

Per difetto (Python, Ruby, MOD)
La stessa espressione, due famiglie di linguaggi
EspressioneTroncato (JS, C, Java)Per difetto (Python, Ruby, MOD)
17 mod 522
−17 mod 5−23
17 mod −52−3

Esempio calcolato con il nostro strumento

Calcolatrice modulo

Dati

Dividendo
9
Divisore
3

Risultato

Resto (a mod b)
0
Quoziente
3

Queste cifre sono prodotte dal calcolatore qui sotto, non digitate a mano — vengono ricalcolate a ogni modifica dello strumento.

Rifarlo con i tuoi numeri →

Domande frequenti

Cosa fa con i decimali?
Funziona ancora — il resto di 17,5 su 5 è 2,5 — ma la virgola mobile binaria rende il risultato inaffidabile ai bordi. Valori che sembrano esatti in decimale non lo sono in binario, quindi un'espressione che dovrebbe cadere su zero può cadere su un numero positivo minuscolo o sul divisore stesso, e un test «il resto è zero?» fallisce allora su numeri che dividono a occhio nudo. Dove quel controllo conta, porta prima a interi — lavora in centesimi anziché in euro, in millisecondi anziché in secondi — e tieni il modulo del tutto lontano dalla virgola mobile.
Quale convenzione preferire?
Quella per difetto, ogni volta che puoi scegliere. Un resto che porta sempre il segno del divisore resta dentro l'intervallo che davvero vuoi quando il divisore è positivo, cioè in quasi ogni uso pratico, e rende superflua la funzione di avvolgimento. La convenzione troncata esiste soprattutto perché l'hardware delle origini divideva così e il C ha seguito l'hardware; sopravvive per inerzia e compatibilità, non per merito. Poiché di rado scegli il linguaggio, l'abitudine utile è semplicemente verificare in quale ti trovi prima di scrivere un modulo su qualcosa che possa diventare negativo.

Articoli che potrebbero interessarti

Tutte le guide →

Strumenti correlati

Fonti

Hai notato un errore in questo articolo?