Created: 2024-04-05 ven 18:48
Il computer non usa il sistema decimale per rappresentare le informazioni
Il sistema posizionale usato e' quello binario, come probabilmente sapete gia'.
Domanda: perche' secondo voi?
"Dividi il sapere in atomi di verita' per comprendere il tutto"
L'informazione elettronica di acceso-spento, o segnale-nessun segnale, e' l'informazione piu' semplice che possiamo produrre con un circuito.
Formalizziamo la rappresentazione di un numero in base \(\beta\):
In base 10:
Similmente, in base 2….
Serve per rappresentare un intero positivo \(\alpha \in \mathcal{N}\) da base 10 ad una diversa base \(\beta\).
Consiste nell'eseguire la divisione intera (operatore // in Python) del numero \(\alpha\) per \(\beta\) finche' non si giunge ad un quoziente nullo, tenendo traccia del resto della divisione.
Implementare l'algoritmo delle divisioni successive in Python (dato un intero \(n\), restituire la rappresentazione binaria.)
Serve per rappresentare la parte decimale di un numero in una base \(\beta > 1\).
Chiamiamo \(p\) la funzione che prende solo la parte intera di un numero reale dato in input;
Il formato fixed point e' usato dal calcolatore per rappresentare gli interi in memoria (\(x \in \mathbb{Z}\))
Il calcolatore ha a disposizione \(t+1\) bit per rappresentare
i valori. Ad esempio, per \(t+1=16\):
\(N = 1235 = (10011010011)_{2}\)
In \(\mathbb{Z}\) abbiamo anche i numeri negativi: per rappresentare un \(N\) negativo si seguono i seguenti step:
Si rappresenta \(|N|\) sui \(t+1\) bit disponibili;
Si "flippano" tutti i bit;
Si somma 1 al risultato
Perche' cosi' tanta fatica quando avremmo potuto usare semplicemente un bit per il segno?
Avendo a disposizione 4 bit, qual'e' il range di valori che possiamo rappresentare?
L'intervallo rappresentabile e' [-8, 7]
Piu' in generale… [-2t, 2t-1]
La morale e' che avendo a disposizione "spazio" limitato, non possiamo rappresentare tutti i numeri!
Provare a rappresentare -9, 23 e -25 avendo a disposizione soltanto 4 bit.
Se proviamo a rappresentare numeri troppo grandi o troppo piccoli, ricadiamo nel problema dell'underflow o dell' overflow.
Se proviamo a effettuare operazioni tra numeri il cui risultato esce dall'intervallo \([-2^{t}, 2^{t}-1]\) si ha perdita di informazione, quindi si commette un errore!
Per rappresentare i numeri reali, e' opportuno avere un metodo che sia flessibile e non sprechi bit;
Se degli 8 bit che abbiamo a disposizione ne assegnamo 5 alla parte intera e 3 alla parte decimale e vogliamo rappresentare un numero con tante cifre dopo la virgola e poche prima della virgola, stiamo "sprecando" dei bit;
La rappresentazione floating point e' usata dal calcolatore per risolvere il problema.
Cerchiamo di rappresentare i valori con la virgola in notazione scientifica:
Similmente,
Come gestiamo gli esponenti negativi?
Ad esempio:
Segno: positivo \(\rightarrow\) 0
Mantissa: \(1.1...0 \rightarrow 10...0\)
Esponente: \(-2 \rightarrow -2 = -127 + 125\)
Quindi per l'esponente iniziamo a contare da \(-127\), in modo da riuscire a rappresentare anche i numeri negativi
Quindi l'esponente che dobbiamo usare e' 125.
Quindi la rappresentazione e' la seguente: