I numeri
Le strutture numeriche e i loro usi
Scheda 3
Lo studio delle proprietà delle strutture numeriche (e non numeriche)
0. Introduzione
1. I numeri macchina delle CT
2. Strutture numeriche
3. Strutture non numeriche
4. I numeri macchina dei linguaggi di programmazione e di
altre applicazioni
5. Esercizi
Sintesi
0. Introduzione
Nelle schede precedenti
di questa unità didattica abbiamo visto come usare i numeri reali o loro
sottoinsiemi (numeri decimali limitati, numeri razionali, numeri interi, numeri
naturali) per rappresentare e studiare le relazioni tra le grandezze che
intervengono in una situazione problematica.
Abbiamo anche visto che
non si tratta sempre di rappresentazioni "esatte" ma che, molto
spesso, i modelli matematici impiegati forniscono rappresentazioni
"approssimate" del fenomeno: se dico che la popolazione di una scuola
è di 758 studenti uso una misura esatta, se invece dico che la lunghezza
di un oggetto è 3.8 cm non
intendo che essa sia esattamente 3.8000
cm.
E nel fare i calcoli
devo tener conto dell'eventuale natura approssimata delle misure su cui opero:
se una piastra rettangolare ha come dimensioni 6.4 cm e
3.8 cm non posso concludere che l'area sia
6.4·3.8 = 24.32 cm² con le
cifre tutte significative
( scheda 2).
A questi problemi si
aggiunge il fatto che in genere eseguiamo i calcoli impiegando un mezzo di
calcolo elettronico (calcolatrice o calcolatore). E, come abbiamo visto
più volte, non sempre c'è corrispondenza tra i numeri "dei
mezzi di calcolo" (numeri macchina) e i numeri "della
matematica" (numeri reali).
Riprendendo questi
aspetti, approfondiremo lo studio delle analogie e delle differenze tra le
varie strutture numeriche e vedremo come la
matematica oggi abbia esteso lo studio delle proprietà algebriche dal
terreno dei numeri a quelli relativi ad altri oggetti matematici:
insiemi, stringhe, vettori, … e
polinomi.
1. I numeri macchina delle CT
I numeri macchina delle CT sono numeri decimali limitati con un numero prefissato di cifre. Ad esempio la figura 1 illustra la configurazione dei registri di una particolare CT che impiega numeri decimali limitati di 8 cifre.
| figura 1 rappresentazione interna di 1.5241577·1014 |
Il numero raffigurato, cioè
Ciò significa che la moltiplicazione tra numeri macchina non coincide con la moltiplicazione
tra numeri reali: ne è infatti l'arrotondamento a 8 cifre.
Analogamente, la addizione, la divisione e la sottrazione delle CT non coincidono con l'addizione, la divisione e la sottrazione in R. Ad esempio, nel caso della nostra CT che arrotonda a 8 cifre, se da 12345678 sottraggo 0.1 non ottengo 12345677.9, ma ancora 12345678 (è l'arrotondamento a 8 cifre di 12345677.9). E se divido 10 per 3 ottengo il numero ad 8 cifre 3.3333333, non il numero decimale illimitato 3.3333333333 .
Si noti che nell'insieme dei numeri decimali limitati non
posso calcolare 10/3: il risultato non è un numero decimale limitato.
Ricordiamo che anche tra i numeri macchina vi sono dei casi in cui le operazioni non
sono definite.
Ad esempio
8·1064·3·1050
fa 2.4·10115 mentre
il massimo numero macchina è 9.9
9·1099.
In questo caso la CT visualizza un
messaggio d'errore a indicare che c'è stato un overflow.
Invece
8·10−64·3·10−50
fa 2.4·10−113, che è inferiore a
1·10−99, il minimo numero positivo su cui
la CT può operare. Si tratta di un underflow.
Alcune CT segnalano questo errore, la maggior parte
delle CT invece, in tutti i casi in cui il risultato avrebbe un esponente
inferiore a −99, assume automaticamente come risultato il numero 0.
Ovviamente anche la funzione reciproco delle CT (x → arrotondamento a 8 cifre di 1/x) non coincide con quella in R. Lo stesso si può dire per la radice quadrata: l'arrotondamento a 8 cifre di √2 non coincide con √2. La funzione cambio segno coincide, invece, con quella in R: infatti questa operazione cambia solo il bit che codifica il segno del numero senza modificare le cifre.
Abbiamo anche visto non valgono le proprietà del riordino e la proprietà distributiva: trasformando un termine mediante queste proprietà si ottiene un termine algebricamente equivalente ma che, calcolato con la CT, può fornire un risultato diverso (e che può essere più o meno vicino al valore "esatto", cioè al valore che corrisponde al calcolo con le operazioni di R).
|
Le formule m = (a+b)/2 e m = a+(b−a)/2
(scheda 3, §6 di Le statistiche)
esprimono entrambe il valore m che sta a metà tra i valori a
e b (la media aritmetica tra a e b).
Infatti per i numeri reali vale la proprietà
|
(5.0000001 + 5.0000003) / 2 =
5.0000001 + (5.0000003 − 5.0000001) / 2 =
(5.0000003 + 5.0000004) / 2 =
5.0000003 + (5.0000004 − 5.0000003) / 2 =
Dati due numeri reali distinti possiamo sempre trovare un terzo numero compreso tra di essi. Ad esempio basta fare la media aritmetica dei due numeri. Nel caso dei numeri macchina questo non è sempre possibile. Infatti i numeri macchina, essendo in quantità finita, possono essere disposti ordinatamente in fila; ogni numero macchina, diverso dall'infinito macchina, ha il suo successivo:
−9.9 99·1099 > −9.9 98·1099 > >
−1.0 00·10−99 > 0 > 1.0 00·10−99
> > 9.9 98·1099 > 9.9 99·1099
e tra i due non vi sono altri numeri macchina. Ad es. tra 9.9999994·103 e 9.9999995·103 o tra 5.0000003 e 5.0000004 non vi sono altri numeri di 8 cifre.
2. Strutture numeriche
Un insieme può
essere considerato una struttura se fisso una o più
operazioni, cioè funzioni con
input e output in esso. Si dice che un suo sottoinsieme è una sottostruttura
rispetto alle operazioni fissate se è chiuso rispetto ad esse.
A destra è rappresentato l'insieme Z dei numeri interi.
Dal puro insieme posso passare a una struttura
considerando ad es. la funzione successore; nella figura è schematizzata anche
questa struttura. A sinistra di questa figura è schematizzato il
sottoinsieme |
Se considero anche l'addizione, ho che Z è una struttura anche rispetto ad essa: l'addizione di due numeri interi è ancora un numero intero. Lo stesso vale per N. Ma se considero la sottrazione, mentre Z è chiuso rispetto ad essa, N non lo è: da 2 non posso sottrarre 5, restando in N.
L'insieme dei numeri reali R è chiuso anche rispetto al passaggio al reciproco: il reciproco di 3 è 0.333 . Ma questo non è un numero intero: Z non è una sottostruttura di R rispetto al reciproco.
Si è anche visto che
Un
insieme può essere considerato una struttura
non solo stabilendo un modo per operare sui suoi elementi (cioè
definendo un'operazione), ma anche determinando un modo per confrontarli.
Ad esempio posso considerare R come struttura rispetto alla relazione
d'ordinamento "<": presi due numeri
reali qualsiasi x e y posso valutare se la condizione
Analogamente potrei
considerare le relazioni "≤", ">",
| Indica, usando "V" o "F", se nei seguenti insiemi numerici valgono le proprietà indicate (a e b indicano due numeri qualunque). |
N | Z | Q | R | [0,1) | |||||||||||||||||||||
esiste un primo elemento | |||||||||||||||||||||||||
esiste un ultimo elemento | |||||||||||||||||||||||||
se a<b esistono infiniti x tali che a < x < b | |||||||||||||||||||||||||
esistono infiniti elementi |
3. Strutture non numeriche
Abbiamo visto non solo strutture numeriche, ma anche altri insiemi su cui abbiamo fissato delle funzioni per operare in essi (operazioni) o delle relazioni. Rivediamoli, studiandone alcune proprietà. Partiamo da un esempio familiare.
Funzioni a 1 input e 1 output in R
  Si è già visto
che, date due funzioni f e g a input e output in
R, le funzioni
| Siano f: x → √x e g: x → √(x−1). (1) Qual è il dominio di f (cioè per quali x il termine √x è definito)? (2) Qual è il dominio di g? (3) Qual è il dominio della funzione somma di f e g? E quelli delle funzioni (4) differenza, (5) prodotto e (6) quoziente? |
Il dominio della funzione somma o differenza o prodotto è l'intersezione del dominio di f
e del dominio di g. Nel caso della funzione quoziente, il dominio si
ottiene da tale intersezione togliendo gli eventuali x per i quali
Per ogni x appartenente al dominio di f e di g
Anche la composizione è un'operazione tra
funzioni. Date f e g, la funzione
|
Siano f: x → x+1 e g: x → √x.
(1) Esplicita l'espressione di |
Alcune definizioni
A questo punto è utile generalizzare alcuni nomi già usati estendendoli al caso di una generica operazione binaria (a due argomenti) ◊ in un insieme A. Si chiamano:
associativa la proprietà: | per ogni x, y e z in A | x◊(y◊z) = (x◊y)◊z |
commutativa la proprietà: | per ogni x e y in A | x◊y = y◊x |
elemento
neutro (o elemento identità) | per ogni x in A | x◊@ = @◊x = x |
elemento
inverso di un elemento x di A | x◊x = x◊x = @ |
|
In R, qual è l'elemento neutro rispetto all'addizione?
E quello rispetto alla moltiplicazione? Qual è l'elemento inverso di 2 rispetto alla addizione? E quello rispetto alla moltiplicazione? Conosci altri modi per denominare l'inverso rispetto all'addizione e quello rispetto alla moltiplicazione? Valgono la proprietà associativa e quella commutativa rispetto alla sottrazione? |
| Qual è l'elemento neutro nell'insieme delle funzioni a dominio in R rispetto alla operazione di composizione? |
Stringhe
Abbiamo visto che tra
le stringhe di un linguaggio di programmazione è definita la concatenazione,
in genere indicata con "+", ma anche in altri modi. Ad esempio mentre in QBasic
per concatenare "ca" e "sa" basta battere
Vale invece la proprietà associativa:
se concateno "ca" e "sa" e poi "le" ottengo la stessa stringa, "casale", che avrei anche
concatenando "ca" al frutto della concatenazione di "sa" e le", ovvero
("ca"+"sa")+"le" = "ca"+("sa"+"le").
| Esiste l'elemento inverso della stringa "ciao"? |
| Tra le stringhe è definita anche la relazione "<". Discuti la verità/falsità delle proprietà considerate nel quesito 2 riferendoti all'insieme delle stringhe (supponi che il linguaggio di programmazione non ponga limiti alla lunghezza delle stringhe). |
Condizioni
Sull'insieme delle condizioni sono definite le "operazioni logiche" che, nei linguaggi di programmazione, sono rappresentate, in genere, con i simboli and, or e not o &, | e !. Usiamo la seconda convenzione.
|
In quali casi p & q è vera?
E p & (q & r)?
Per & valgono la proprietà commutativa e associativa? Quando p | q è falsa? E p | (q | r)? Per | valgono la proprietà commutativa e associativa? |
Insiemi
Ricordiamo che, dati due insiemi (di numeri, di punti,
) A e B,
• la loro unione è l'insieme degli x tali che
x∈A or x∈B; in genere è indicato
• la loro intersezione è l'insieme degli x tali che
x∈A and x∈B; in genere è indicato
Quindi per ∪ e ∩ valgono proprietà analoghe
a quelle di or e and. La rappresentazione grafica delle condizioni come sottoinsiemi (gli ovali nelle figure a lato) di un insieme dato (il rettangolo "arrotondato") spesso consente di verificare o trovare una proprietà degli operatori logici in modo molto semplice. Ad esempio a lato è illustrata l'equivalenza tra | ||||
|
Vettori e trasformazioni geometriche
Nel caso delle traslazioni, che sono funzioni a 2 input e 2 output in
R, la composizione verifica la proprietà commutativa; infatti la proprietà
commutativa è
verificata dalla addizione tra vettori
|
Nella figura a fianco è illustrata la successiva applicazione al punto (1,1)
della traslazione di passi 2 e 1 e della rotazione attorno all'origine di
ampiezza −90°. Il punto trasformato è (2,−3). • Qual è il punto trasformato se a (1,1) applico prima la rotazione e poi la traslazione? • La composizione tra movimenti piani è commutativa? |
La parte della matematica che si occupa
delle proprietà delle strutture numeriche e del calcolo
simbolico o letterale su espressioni numeriche viene
chiamata anche algebra elementare o algebra
classica in quanto, ai nostri giorni (a partire dagli inizi
del '900), con "algebra" si intende, più
in generale, la parte della matematica che si occupa delle proprietà
delle strutture sia numeriche che non numeriche, di cui abbiamo visto
qualche esempio in questo paragrafo.
Alcuni chiamano algebra e algebra
moderna ciò che qui si è indicato come, rispettivamente, algebra
classica e algebra.
In qualche libro si trova che l'algebra (elementare) sarebbe l'area della matematica
che si occupa della risoluzione delle equazioni.
Questo non è corretto: come abbiamo visto, per affrontare questo
argomento (e inquadrarlo teoricamente) entrano in gioco in modo decisivo
anche i concetti di funzione e di continuità,
che, volendo fare classificazioni, rientrano nella parte della matematica nota
come analisi matematica, di cui ti occuperai più a fondo nei
prossimi anni.
4. I numeri macchina dei linguaggi di programmazione e di altre applicazioni
Con questa
calcolatrice (http://macosa.dima.unige.it/om/prg/js/calc.htm) se eseguo 843.27−843.23 e 5555.1251−5555 ottengo
0.03999999999996362 e 0.12510000000020227 invece che 0.04 e 0.1251.
Come mai?
Se eseguo operazioni analoghe con R ottengo:
x <- 843.27; y <- 843.23; x-y; x <- 5555.1251; y <- 5555; x-y
0.04 0.1251
ma se eseguo i seguenti calcoli, che dovrebbero dare 0, ho:
0.04-(843.27-843.23); 0.1251-(5555.1251-5555)
3.638062e-14 -2.022826e-13
Come mai?
Vediamo, prima, che cosa accade in R. Le uscite vengono espresse
con 6 cifre, ma i risultati sono memorizzati internamente con più cifre (circa 16),
che possiamo esplorare caricando la "libreria" di comandi codetools e azionando, poi,
showTree..
library(codetools)
showTree(843.27-843.23); showTree(5555.1251-5555)
0.0399999999999636 0.125100000000202
Con la "calcolatrice" iniziale abbiamo avuto uscite analoghe: essa visualizza direttamente
più cifre.
Come mai accade ciò?
A differenza di quanto
avviene nelle usuali CT, che (come abbiamo visto in §1) memorizzano i numeri in BCD,
gran parte delle applicazioni per computer memorizzano i valori numerici nei registri associati alle
variabili in forma binaria. Forse hai già visto come vengono trasformati in forma binaria
i numeri interi; negli Oggetti Matematici puoi rivedere
questo aspetto. Puoi anche vedere come avviene questa trasformazione nel caso dei
numeri non interi. Ad ogni modo su ciò ritorniamo con una semplice applicazione
a cui puoi accedere da
http://macosa.dima.unige.it/om/prg/js/division.htm.
Eccone una particolare uscita, per visualizzare il rapporto tra due interi espresso in forma decimale:
Divisione di m per n con m < n (numeri naturali in base dieci) e risultato in base a scelta. Cliccando [Fai un passo] ottieni via via le cifre del risultato m = n = base = resto = |
| Esegui, con il programmino precedente, 27/100 in base dieci e in base due, 1/9 in base dieci, in base tre e in base due, 1/5 in base dieci e in base due. Che cosa osservi? |
Il concetto di numero limitato
(cioè numero con periodo 0) dipende dalla base di rappresentazione.
1/2, che in base dieci è 0.5, in base due diventa 0.1; ma 1/10, che in base dieci
diventa 0.1, in base due diventa il numero illimitato 0.00011001100110011
in quanto
non riesco ad esprimere 0.1 come somma di una quantità finita di frazioni prese tra
1/2, 1/4, 1/16, 1/32, ... (che, scritti in base due, diventano 0.1, 0.01, 0.001, 0.0001,
).
A questo punto ci è facile capire le uscite strane considerate all'inizio
del paragrafo: 843.27 e 843.23 vengono internamente espressi in forma binaria e approssimati,
viene fatta la differenza tra questi due numeri in base 2, e il risultato viene visualizzato
in base dieci: 0.03999999999996362 è il risultato che differisce da 0.04 del valore
decimale corrispondente alle cifre binarie che si sono perse.
I programmi considerati riescono a rappresentare
un numero finito di numeri. Avranno, quindi, anche un numero massimo.
Con la calcolatrice considerata all'inizio del paragrafo il massimo numero
che riesco a calcolare è 21024 (1024 è pari a 2 alla 10,
ossia, in base 2, a 10000000000); mi viene dato
1.797693e+308 come risultato; se aumento di 1 l'esponente o di 0.00001 la
base mi viene segnalato un errore di overflow. In R l'errore viene
segnalato se batto 2^1024; ottengo il valore 1.797693e+308 se batto
2^1023*1.999999999999999.
In molti linguaggi di programmazione, e in R, i numeri interi non troppo
grandi vengono registrati non in notazione scientifica, ma per esteso, in modo esatto (ciò
è possibile in quanto per questi numeri la memoria del programma non viene usata per
memorizzare l'esponente della notazione scientifica). Facciamo un esempio. Se in R batto:
123456*123456 ottengo:
15241383936; se poi batto:
123456*123456-15241383936 ottengo:
0. Invece se batto:
1.23456*1.23456-1.5241383936 ottengo:
2.220446e-16.
I fogli di calcolo operano sui numeri in modo simile. Con opportune opzioni si può associare ad ogni cella un particolare tipo di visualizzazione (forma esponenziale o no, numero di cifre visualizzate, …). Ma, purtroppo, le versioni in italiano hanno una modalità di rappresentazione e visualizzazione dei numeri non compatibile con quelle degli altri paesi.
Si possono mettere a punto particolari programmi per visulizzare più cifre dei risultati, analoghi a quello visto prima del quesito 12. Esistono varie applicazioni matematiche che consentono di ottenere una quantità finita qualunque di cifre dei risultati di un certo calcolo. Ma, tranne i casi in cui i risultati possono essere espressi come frazioni o in altri modi particolari (come radici quadrate di una frazione, per esempio), non esiste il modo di rappresentare esattamente il risultato di una operazione. Comunque nei casi "pratici", in cui si opera con numeri approssimati, ciò non costituisce in genere un problema.
5. Esercizi
| Determina il più piccolo sottoinsieme di R contenente 3 chiuso rispetto alla addizione, quello contenente 3 chiuso rispetto alla sottrazione, quello contenente 3 chiuso rispetto alla sottrazione e alla divisione. |
|
Siano f la funzione x → √(x+2) e
g la funzione x → x−1. Qual è il dominio di
f, g, f+g, f·g,
f/g, g/f,
|
|
Date f: x → 2x, g: x → x+1, h: x → x−1
e k: x → x/2, stabilisci se fra le seguenti funzioni ve ne sono di eguali
(motiva la risposta): Nell'insieme delle funzioni a input e output in R qual è l'elemento neutro rispetto alla composizione? Qual è l'elemento inverso di g? |
|
In che senso la seguente riga di comandi per il software R consente di
trarre le stesse conclusioni deducibili dalla figura prima del quesito 10? for (p in 0:1) for (q in 0:1) print(c(p,q, !(p|q), (!p)&(!q))) |
|
Esegui i seguenti comandi del software R e stabilisci che conclusioni
puoi trarne; for (p in 0:1) for (q in 0:1) for (r in 0:1) print(c(p,q,r, p|(q&r))) for (p in 0:1) for (q in 0:1) for (r in 0:1) print(c(p,q,r, (p|q)&(p|r))) for (p in 0:1) for (q in 0:1) for (r in 0:1) print(c(p,q,r, p&(q|r))) for (p in 0:1) for (q in 0:1) for (r in 0:1) print(c(p,q,r, (p&q)|(p&r))) |
| Prova a determinare, senza l'aiuto del computer, (1/8)16, (1/16)8, (3/4)2, (3/4)16, (7/8)16. Controlla i risultati col programma considerato nel quesito 12. |
1) Segna con l'evidenziatore, nelle parti della scheda indicate, frasi e/o formule che descrivono il significato dei seguenti termini: sottostruttura (§2), elemento neutro (§3), elemento inverso (§3), numero limitato (§4). 2) Su un foglio da "quadernone", nella prima facciata, esemplifica l'uso di ciascuno dei concetti sopra elencati mediante una frase in cui esso venga impiegato. 3) Nella seconda facciata riassumi in modo discorsivo (senza formule, come in una descrizione "al telefono") il contenuto della scheda (non fare un elenco di argomenti, ma cerca di far capire il "filo del discorso"). |