[BASE Cinque - Appunti di Matematica ricreativa]

Divisione, quoziente, resto

Il resto di una divisione può essere negativo? Ovvero, quanto fa a MOD b?

N.B. Ho completamente riscritto questa pagina perché era poco chiara.

Le seguenti riflessioni nascono da una domanda posta da Pietro Vitelli al Forum.

Salve gente, scusate la banalità, ma:

-14 mod 16

a che cosa è uguale? a -14 o a 2?

Sul blog di Umberto Cerruti ho trovato un calcolatore implementato in javascript, che permette di effettuare anche il modulo di un numero e mi da che è uguale a 2, mentre io pensavo fosse uguale a -14.

Questo è il link: http://alpha01.dm.unito.it/personalpages/cerruti/cp0/calc8.html

Come funziona l'aritmetica modulare per i negativi?


1. Nei numeri naturali (non c'é problema)

Se a, b sono numeri naturali, con b diverso da 0, allora esistono due numeri naturali (unici), q, r tali che:

a = qb + r

con 0 ≤ r < b

q si chiama quoziente e r resto della divisione di a per b.

L'algoritmo della divisione a/b dimostra l'esistenza e l'unicità di q, r e inoltre permette di trovarli.

Esempi
Dividendo 13 per 10, 1 è il quoziente e 3 è il resto, perché 13=1×10+3.
Dividendo 26 per 4, 6 è il quoziente e 2 è il resto, perché 26=6×4+2.
Dividendo 56 per 7, 8 è il quoziente e 0 è il resto, perché 56=7×8+0.

Nei numeri naturali si può dire che: a mod b è il resto della divisione di a per b

Esempio
26 mod 4 = 2


2. Nei numeri interi relativi

Entrando nei numeri relativi c'è un po' di confusione perché circolano almeno due diverse definizioni autorevoli di divisione intera, resto, e operatore mod.
Per questo motivo, diversi software possono dare diverse risposte, sebbene riconducibili le une alle altre.

Premessa: le funzioni floor(x) e ceiling(x)
In informatica, ma anche in matematica si utilizzano due particolari funzioni di "arrotondamento" dei numeri, chiamate floor (pavimento) e ceiling (soffitto).

floor(x) approssima un numero reale x al più grande intero <= x e si indica col simbolo: floor

Esempi
floor(3.7) = 3
floor(-3.7) = -4

ceiling(x) approssima un numero reale x al più piccolo intero >= x e si indica col simbolo: ceiling

Esempi
ceiling(3.7) = 4
ceiling(-3.7) = -3

I matematici tendono ad accettare il seguente teorema e le definizioni che ne seguono.

Teorema (tratto da un testo di matematica)
Siano a; b due interi, con b <> 0.
Allora esistono due, e due soli, interi q; r, tali che:
a = bq + r con 0 <= r < |b|.

Definizioni
Il numero q si chiama quoziente della divisione di a per b, mentre il numero r si chiama resto, di tale divisione.

Esempi:
Indico con div la divisione intera
19 div 5 = 3, resto 4
-19 div -5 = 4, resto 1
-19 div 5 = -4, resto 1
19 div - 5 = -3, resto 4

La divisione intera, quindi, può essere definita come:
a div b = floor(a/b), dove a/b è la normale divisione fra numeri reali.

In questo caso si può dire che il resto è quel numero positivo che bisogna addizionare al prodotto del divisore per il quoziente per ottenere il dividendo.

Così risultano definiti la divisione intera e il resto. Ma che ne è del mod?
Il prof. Umberto Cerruti, nella pagina didattica "Aritmetica modulare" (http://alpha01.dm.unito.it/personalpages/cerruti/cp0/aritmod.html), definisce il modulo così:

Denotiamo inoltre con
a mod n

il resto della divisione di a per n.

Secondo questa definizione, a mod b, coincide con il resto della divisione di a per b ed è sempre positivo.
Perciò, ad esempio:
19 mod 5 = 4
-19 mod -5 = 1
-19 mod 5 = 1
19 mod - 5 = 4
-14 mod 16 = 2

Gli informatici, invece, tendono ad utilizzare definizioni leggermente diverse.

Definizioni

Siano x reale, n, d interi e sia la funzione TRUNC così definita:

TRUNC(x) = floor(x) se x>=0 (il più grande intero <= x)
TRUNC(x) = ceiling(x) se x<0 (il più piccolo intero >= x)

Esempi
TRUNC(3.4)=3
TRUNC(-3.4)=-3

Indichiamo a/b la divisione fra numeri reali.
Definiamo le operazioni div (divisione intera), rem (resto), mod come segue:

Definizione di divisione intera

a div b = TRUNC(a/b)

Esempi
19 div 5 = 3
-19 div -5 = 3
-19 div 5 = -3
19 div - 5 = -3

Definizione di resto della divisione intera

a rem b = a-b*TRUNC(a/b)

Esempi
19 rem 5 = 4
-19 rem -5 = -4
-19 rem 5 = -4
19 rem - 5 = 4

Cioè il resto ha lo stesso segno del dividendo.

Definizione dell'operatore mod

a mod b = a - b * floor(a/b)

Esempi
19 mod 5 = 4
-19 mod -5 = -4
-19 mod 5 = 1
19 mod - 5 = -1
-14 mod 16 = -14 - 16*(-1) = 2

Definizioni tratte da:
Strength Reduction of Integer Division and Modulo Operations
Saman Amarasinghe, Walter Lee, Ben Greenwald
M.I.T. Laboratory for Computer Science
Cambridge, MA 02139, U.S.A.
fsaman,walt,bengg@lcs.mit.edu
http://www.cag.lcs.mit.edu/raw

Salvo errori & omissioni

Però sarebbe bello mettersi d'accordo!

Data creazione: febbraio 2006

Ultimo aggiornamento: marzo 2006

xhtml 1.1


Sito Web realizzato da Gianfranco Bo