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.

segno

mantissa

segno

esponente

+

1

5

2

4

1

5

7

7

+

1

4

 \ punto decimale sottointeso
figura 1  
rappresentazione interna di 1.5241577·1014

    Il numero raffigurato, cioè 1 524 157 700 000 000, è il risultato per la CT della moltiplicazione 12345678·12345678. Eseguendo a mano tale calcolo si ha invece 1 524 157 765 279 684.
    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).

 1 
   Le formule  m = (a+b)/2  e  m = a+(ba)/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à  (a+b)/2 = a+(ba)/2:  sia il termine a sinistra che quello a destra possono essere trasformati in  a/2 + b/2.  Questi due termini sono equivalenti anche per le CT?   Per rispondere, facendo riferimento alla nostra CT, completa quanto segue  (dove  +/  qui indicano le operazioni fatte dalla CT):

(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 Z 0 degli interi maggiori o eguali a 0, ovvero l'insieme N dei numeri naturali, che è chiuso rispetto a questa operazione: il successore di un numero naturale è ancora un numero naturale.  

    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 R 0 è chiuso rispetto alla estrazione della radice quadrata mentre per l'insieme Q 0 dei numeri razionali maggiori o eguali a 0 questo non vale: 2 è un numero razionale mentre √2 non lo è.

    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 x < y è vera o falsa.  La relazione "<" è una relazione a due argomenti in R, cioè, in altre parole, una funzione a 2 input in R e con output in {vero, falso}.
    Analogamente potrei considerare le relazioni "≤", ">", …

 2 
   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 < 
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 x → f(x)+g(x) e x → f(x)·g(x) vengono dette funzione somma e funzione prodotto. Analogamente x → f(x)−g(x) e x → f(x)/g(x) sono dette funzione differenza e funzione quoziente (o rapporto).

 3 
   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 g(x) vale 0.
    Per ogni x appartenente al dominio di f e di g  f(x)+g(x) = g(x)+f(x): infatti la addizione tra numeri reali verifica la proprietà commutativa. Quindi f+g e g+f a parità di input forniscono lo stesso output, cioè sono funzioni uguali. Possiamo quindi dire che anche per la somma di funzioni vale la proprietà commutativa.  Considerazioni analoghe valgono per le altre proprietà (commutatività del prodotto, proprietà associativa, proprietà distributiva, …).

    Anche la composizione è un'operazione tra funzioni. Date f e g, la funzione g(f(.)) all'input x associa l'output g(f(x)).

 4 
   Siano f: x → x+1 e g: x → √x.  (1) Esplicita l'espressione di g(f(x)).  (2) Qual è il dominio di g(f(.))?  (3g(f(.)) è uguale a f(g(.))?  (4) Vale la proprietà commutativa per la composizione tra funzioni?

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(yz) = (xy)z
commutativa la proprietà:per ogni x e y in A xy = yx

elemento neutro (o elemento identità)
un elemento @ di A tale che:

per ogni x in A x@ = @x = x

elemento inverso di un elemento x di A
un altro elemento x di A tale che:

xx = xx = @

 5 
   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?

 6 
   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 "ca" + "sa", in R occorre usare il comando paste ("incolla") e battere  paste ("ca", "sa", sep="").  Non vale la proprietà commutativa; ad es. la concatenzazione di "A" e "B" vale "AB", che è diversa da "BA", quella di "B" ed "A".
    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").

 7 
   Esiste l'elemento inverso della stringa "ciao"?

 8 
   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.

 9 
   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 A B,
  la loro intersezione è l'insieme degli x tali che x∈A and x∈B; in genere è indicato A B

    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  not(P or Q)  e  (not P) and (not Q)   ["è falso che: x≤1 o x>2"  equivale a  "x>1 e x≤2"]
 

 10 
   Verifica graficamente su un foglio se  not(P and Q)  equivale a  (not P) or (not Q).

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 ( La matematica e lo spazio, scheda 1).  Per la addizione tra vettori vale anche la proprietà associativa, l'esistenza dell'elemento neutro (è il vettore nullo) e dell'elemento inverso (il vettore opposto).

 11 
   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 =    

 12 
   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

 e1 
    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.

 e2 
    Siano f la funzione x → √(x+2) e g la funzione x → x−1. Qual è il dominio di  fgf+gf·gf/gg/fg(f(.))  e  f(g(.))?  Esplicita l'espressione di  g(f(x))  e di  f(g(x)).

 e3 
    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):  g(f(.))h(f(.))k(f(.))f(g(.))h(g(.))k(f(.)).
    Nell'insieme delle funzioni a input e output in R qual è l'elemento neutro rispetto alla composizione?  Qual è l'elemento inverso di g?

 e4 
    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)))

 e5 
    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)))

 e6 
    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").