Calcolo numerico/Cos'è l'aritmetica floating point
I calcolatori usano la rappresentazione dei numeri in base 2, e usano la rappresentazione dei numeri in virgola mobile normalizzata.
Rappresentazione in virgola fissa in base 10
Consideriamo un qualsiasi numero reale , allora
dove , , parte intera, mantissa), e .
Equivalentemente, si scrive
Teorema 1.1
In base , se supponiamo che non esista tale che , allora esiste unica la rappresentazione .
Esempio 1.2
Supponiamo di considerare
violando l'ipotesi del teorema. Infatti, esiste tale che per ogni , si ha .
con il cambio di variabile , e tenendo conto che per ogni ,
e questa è la serie geometrica di ragione , quindi
e abbiamo trovato una rappresentazione differente del numero.
Il vantaggio della rappresentazione in virgola fissa è la semplicità. Lo svantaggio è l'uniformità. Fissiamo il numero di cifre della parte intera del numero e della sua parte decimale. I numeri che rappresentiamo sono equispaziati (uniformità). C'è quindi uno svantaggio se vogliamo lavorare contemporaneamente con numeri grandi e piccoli.
Rappresentazione equivalente in virgola mobile
Raccogliendo otteniamo:
Si mette in evidenza l'ordine di grandezza del numero.
Ad esempio,
Cambio di variabile:
e stiamo usando una rappresentazione in virgola mobile che mette in evidenza l'ordine di grandezza.
Il vantaggio è che l'ordine di grandezza del numero viene messo subito in evidenza. Inoltre, se abbiamo un numero fissato di cifre di mantissa, allora i numeri non sono più equispaziati.
Struttura dell'insieme F dei numeri macchina
Sono fissati , il numero di cifre di mantissa, che rappresentano il minimo e massimo esponente della base. Allora è
dove per le cifre vale che , e dove e dove .
Si pone per risparmiare cifre, perché ad esempio, invece di scrivere si scrive .
Consideriamo per semplicità , , , . Analizzo quindi la struttura di .
Ci si chiede qual è il più piccolo numero positivo che si riesce a rappresentare.
mentre
Sulla retta rappresentiamo , e i numeri prima di e oltre non possono essere rappresentati in .
Calcolo la differenza tra i due numeri: chiamiamo spacing la differenza tra un numero e il successivo, cioè, in questo caso, .
Lo stesso si ripete in tutti gli intervalli della forma oppure etc.
Per i numeri successivi a si ha un cambiamento. Infatti, tra numeri del tipo
Lo spacing è .
Considerando la rappresentazione in virgola mobile, si ha che quando i numeri sono piccoli sono più vicini fra loro, man mano che il loro valore assoluto aumenta i numeri si diradano.
L'equispaziatura è uguale per valori con lo stesso ordine di grandezza.
Consideriamo il caso generale . Allora si ha
1.
2.
Cambio di variabile:
e per la somma della serie geometrica:
3. Quantità di numeri positivi tra e (lo stesso vale per i negativi). Abbiamo cifre di mantissa, e le possibilità con cui possiamo sceglierle sono:
Considerando gli esponenti a disposizione:
4. Spacing: se poniamo , il suo successivo è , e lo spacing è nell'intervallo . In generale, in un intervallo , poniamo , e il successivo , quindi lo spacing è nell'intervallo (da ricordare).
Osservazione 1.1
Lo spacing diventa 1 quando , ovvero , . Quindi, nell'intervallo lo spacing è uguale a 1 e ci sono solo numeri interi.
Singola precisione
Per rappresentare un numero in singola precisione si hanno a disposizione 32 bit = 4 byte in base allo Standard i754, fissato nel 1985. In base 2, dei 32 bit, se ne usa 1 per il segno ( o ), 8 bit per l'esponente, 23 bit per la mantissa. Per evitare di utilizzare un bit per il segno dell'esponente, si considerano solo esponenti positivi.
In particolare,
L'esponente -126 viene rappresentato con 1, e tutti gli esponenti vengono traslati di +127, e l'esponente massimo viene rappresentato con 254.
è l'esponente che viene riservato allo zero, o per i numeri denormalizzati.
è riservato a infinito o al not a number (risultato di un'operazione non definita).
Uso 23 bit di mantissa, ma si ha un bit extra perché il primo bit è per forza uguale a 1 e non lo memorizzo.
Quindi, in singola precisione, .
Doppia precisione
Ogni numero occupa 64 bit e si utilizzano:
- 1 bit per il segno del numero
- 11 bit riservati all'esponente (shiftato di 1023)
- 52 cifre riservate alla mantissa, + un bit extra, quindi .
realmin e realmax indicano la barriera di underflow e la barriera di overflow, e nella doppia precisione ci sono 16 cifre decimali.