CCalculate.Studio

% Calcolatore Modulo

L'operazione di modulo restituisce il resto che rimane quando un numero viene diviso per un altro. Questo calcolatore ricava a mod b secondo la convenzione floor, quella matematica, in cui il segno del risultato segue sempre il divisore, e mostra inoltre il risultato troncato, tipico dei linguaggi di programmazione, in cui il segno segue il dividendo: le due convenzioni coincidono sui numeri positivi ma divergono non appena entra in gioco un valore negativo.

Ultima revisione: 2026-07-07
Add as preferred on Google

Come leggere le convenzioni di segno

Le due convenzioni danno risultati identici quando entrambi i numeri sono positivi, mentre divergono non appena compare un valore negativo, come mostra la tabella.

abRisultato floor (segno di b)Risultato troncato (segno di a)
13533 (uguale: entrambi positivi)
−1352−3
13−5−23
−13−5−3−3 (uguale: entrambi negativi)
  • Il modulo floor, qui adottato come risultato principale, è la convenzione più diffusa in matematica pura e in teoria dei numeri, e coincide con l'operatore % di Python.
  • Il modulo troncato, mostrato come risultato secondario, corrisponde all'operatore % di JavaScript, C, C++, Java e della maggior parte dei linguaggi della famiglia C, dove il segno del resto segue il dividendo.
  • Il modulo per zero non è definito e il calcolatore non lo elabora: il divisore deve essere un numero diverso da zero.

Che cos'è l'operazione di modulo?

L'operazione di modulo, scritta a mod b oppure a % b, restituisce il resto della divisione di a per b. Per esempio, 13 mod 5 = 3, poiché 13 = 2 × 5 + 3: dividendo 13 per 5 si ottiene quoziente 2 con resto 3. Il modulo è fondamentale nella teoria dei numeri, dove regge l'aritmetica modulare o «dell'orologio», nell'informatica, con hashing, indicizzazione ciclica e checksum, e nel ragionamento quotidiano su resti e cicli, come i giorni della settimana o le ore dell'orologio.

Esistono due convenzioni matematiche diffuse per stabilire il segno del risultato in presenza di numeri negativi: il modulo floor, in cui il risultato assume sempre il segno del divisore b, e il modulo troncato, in cui assume sempre il segno del dividendo a. Entrambe sono definizioni valide di «resto» e coincidono esattamente quando a e b sono positivi; divergono soltanto quando compare un valore negativo.

La scelta della convenzione ha ricadute concrete, poiché i linguaggi di programmazione adottano impostazioni diverse: l'operatore % di Python segue il modulo floor, mentre JavaScript, C, C++, Java e la maggior parte dei linguaggi della famiglia C usano il modulo troncato, che segue il segno del dividendo. Questo calcolatore riporta esplicitamente entrambi i risultati, così da poter leggere direttamente quello della convenzione che ti serve.

Come usare questo calcolatore di modulo

  1. Inserisci il dividendo (a), cioè il numero da dividere.
  2. Inserisci il divisore (b), cioè il numero per cui dividere. Il divisore non può essere 0, poiché la divisione, e con essa il modulo, non è definita per zero.
  3. Leggi il risultato nella convenzione floor, in cui il segno segue sempre il divisore: è la convenzione matematica più diffusa in teoria dei numeri.
  4. Confronta poi con il risultato nella convenzione troncata, in cui il segno segue sempre il dividendo, se devi allinearti all'operatore % di un linguaggio specifico, e controlla il quoziente e l'equazione completa della divisione per il dettaglio del calcolo.

Le formule del modulo floor e del modulo troncato

Floor: q = ⌊a ÷ b⌋, r = a − b × q (il segno di r segue il divisore b)
Troncata: q = trunc(a ÷ b), r = a − b × q (il segno di r segue il dividendo a)
Esempio: 13 mod 5 = 3 (le due convenzioni coincidono)
Esempio: −13 mod 5 → floor = 2, troncata = −3 (le convenzioni divergono)

Il modulo floor definisce il quoziente come q = ⌊a ÷ b⌋, arrotondato per difetto verso meno infinito, e poi r = a − b×q. Ciò garantisce che il resto r abbia sempre lo stesso segno del divisore b, oppure sia 0, e soddisfi 0 ≤ r < |b| quando b > 0. Esempio svolto per 13 mod 5: q = ⌊13/5⌋ = 2, quindi r = 13 − 5×2 = 3.

Esempio svolto con dividendo negativo: −13 mod 5 nella convenzione floor dà q = ⌊−13/5⌋ = ⌊−2,6⌋ = −3, dunque r = −13 − 5×(−3) = −13 + 15 = 2. Nota che il risultato è positivo, in accordo con il divisore positivo, e differisce quindi dal risultato troncato illustrato qui sotto.

Il modulo troncato definisce invece il quoziente arrotondando verso lo zero anziché verso meno infinito, e calcola poi il resto allo stesso modo; così il resto assume sempre il segno del dividendo a, oppure vale 0. Esempio svolto: −13 mod 5 nella convenzione troncata, cioè il risultato di % in JavaScript, C e Java, arrotonda −2,6 verso lo zero ottenendo −2, dunque r = −13 − 5×(−2) = −13 + 10 = −3, valore negativo in accordo con il dividendo negativo, a differenza del +2 che la convenzione floor restituisce sugli stessi dati.

Errori comuni

  • Dare per scontato che tutti i linguaggi calcolino a mod b allo stesso modo con i numeri negativi: JavaScript, C, C++ e Java usano il modulo troncato, mentre Python e molti testi di matematica adottano quello floor, e i risultati differiscono ogni volta che a è negativo.
  • Dimenticare che il risultato floor condivide il segno del divisore e non quello del dividendo: è l'opposto di quanto restituisce la convenzione troncata in stile JavaScript.
  • Provare a calcolare a mod 0: come la divisione, anche l'operazione di modulo è indefinita quando il divisore è zero.
  • Inserire valori non interi aspettandosi il comportamento dell'aritmetica modulare sugli interi: il calcolatore accetta numeri reali e applica la stessa logica di arrotondamento, tuttavia molte proprietà classiche dell'aritmetica modulare, come quella dell'orologio, sono definite specificamente per gli interi.

Domande frequenti

Che differenza c'è fra modulo floor e modulo troncato?

Il modulo floor arrotonda il quoziente verso meno infinito, cosicché il resto assume sempre il segno del divisore. Il modulo troncato arrotonda invece il quoziente verso lo zero, cosicché il resto assume sempre il segno del dividendo. Le due convenzioni coincidono quando entrambi i numeri sono positivi, ma divergono se uno dei due è negativo: per esempio −13 mod 5 vale 2 con la convenzione floor e −3 con quella troncata.

Perché −13 mod 5 dà risultati diversi a seconda del calcolatore?

Dipende dalla convenzione di segno adottata. Il modulo floor dà 2, valore che segue il segno positivo del divisore e soddisfa 0 ≤ r < 5. Il modulo troncato dà invece −3, che segue il segno negativo del dividendo. L'operatore % di Python restituisce 2 (floor), quelli di JavaScript, C e Java restituiscono −3 (troncato). Nessuna delle due è «più corretta»: sono due definizioni matematiche distinte e ugualmente valide.

Come si calcola a mod b a mano?

Si divide a per b per ottenere il quoziente, lo si arrotonda secondo la convenzione scelta — per difetto nel caso floor, verso lo zero nel caso troncato — e si sottrae poi da a il prodotto di b per quel quoziente: resto = a − b × quoziente. Per 13 mod 5: 13 ÷ 5 = 2,6, che si arrotonda a 2 in entrambe le convenzioni, dunque resto = 13 − 5×2 = 3.

Che cosa significa «mod» nell'aritmetica modulare e in quella dell'orologio?

L'aritmetica modulare tratta i numeri come se «si riavvolgessero» una volta raggiunto il modulo: l'esempio classico è l'orologio a 12 ore, in cui il tempo si calcola mod 12, oppure mod 24 nel formato a 24 ore. Per esempio, le 15 in notazione a 24 ore corrispondono a 15 mod 12 = 3 sul quadrante a 12 ore. Il modulo è appunto l'operazione che produce questo resto «riavvolto».

Si può calcolare il modulo con un divisore negativo?

Sì. Con la convenzione floor, a mod b con b negativo dà un resto dello stesso segno di b: per esempio 13 mod −5 = −2, poiché 13 = (−3)×(−5) + (−2). Con la convenzione troncata il resto segue invece il segno del dividendo: 13 mod −5 = 3, poiché il quoziente arrotonda verso lo zero a −2 e si ottiene 13 − (−5)×(−2) = 13 − 10 = 3.

Fonti

  1. Rosen KH. Elementary Number Theory and Its Applications. 6th ed. Pearson, 2010. (Division algorithm and modular arithmetic.)
  2. 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.)
  3. ECMA International. ECMA-262: ECMAScript Language Specification — the remainder operator (%). ecma-international.org.

Teoria dei numeri · Tutti i calcolatori

Calcolatori correlati