L’aritmetica del Matlab.
Abbiamo introdotto il concetto di aritmetica finita in astratto insieme alle nozioni di
numero floating, precisione e operazione floating. Poiché molte sperimentazioni numeriche
verranno eseguite in ambiente Matlab, mostriamo in quale modo in questo ambiente vengono
costruiti i numeri floating. Per costruire ognuno di questi numeri il Matlab si serve di 64 bit,
ognuno dei quali può essere riempito solo da zero o uno. Lo zero che non ha rappresentazione
floating point, ma che comunque è un numero floating dell’aritmetica, viene individuato con tutti
bit nulli. Per ogni altro numero il primo bit è dedicato al segno, i successivi undici bit sono
destinati a formare l’esponente e i restanti 52 definiscono la mantissa. Se il primo bit è zero, il
segno del numero è positivo, se è uno il segno è negativo. Gli undici bit dedicati all’esponente
permettono di calcolare BIT × 210 + BIT × 29 + BIT × 28 +….. BIT × 21 + BIT × 20. Ma i bit non possono
essere tutti zero né possono essere tutti uno, per ragioni che saranno chiare in seguito. Allora il
più piccolo esponente si ottiene con i primi dieci bit zero e l’ultimo bit 1. Il valore è uno. Il più
grande esponente si realizza con i primi dieci bit uno e l’ultimo bit zero. Il valore è 1 × 210 + 1 × 29 +
1 × 28 +….. 1 × 21 + 0 × 20 = 2046. Ma allora dove sono gli esponenti negativi ?. In realtà questa è la
realizzazione fisica dell’esponente. Quello che si vuole denotare si trova con il complemento a due.
Vale a dire da questo esponente va sottratto 1022. In conseguenza il più piccolo esponente è L = 1021 e il più grande esponente è U = 1024.
Per quanto riguarda la mantissa, abbiamo a disposizione 52 bit. Ma sappiamo che le mantisse
standard hanno prima cifra non nulla. In questo contesto ( base 2) la prima cifra non nulla è
necessariamente uno, e pertanto, può essere sottinteso. Quindi le cifre consentite alla mantissa
sono 53, e una volta riempiti i bit, il valore della mantissa è
mantisssa = 1/2 + BIT × (1/22) + BIT × (1/23) +……BIT × (1/253)
La più piccola mantissa è quindi .1 = ½ e la più grande mantissa è con 53 uno dopo il punto, cioè 1253. Ma l’aritmetica è troncata o arrotondata ?. In alcune circostanze si esegue un troncamento e
in altre un arrotondamento. Rinunciamo a illustrare queste scelte, ma ci limitiamo a dire che a
causa di questa aritmetica ibrida la precisione denotata con eps, è eps = 2-52, cioè quella
dell’aritmetica troncata.
Le costanti realmax e realmin.
Se la più grande mantissa è 1 -253, il più grande numero floating è (1-253)21024 ≈ 1.977 ×10
308
e viene denotato con realmax. La più piccola mantissa è ½ e il più piccolo numero floating
positivo diventa 1/2×2-1021 = 2-1022 ≈ 2.2551 × 10-308. Quindi l’intervallo *realmin realmax+ è
l’insieme dei numeri positivi rappresentabili in Matlab, mentre l’intervallo [-realma –realmin] è
l’insieme dei numeri negativi rappresentabili.
La costanti inf
Dopo realmax si realizza over flow e per il matlab si tratta di inf.. Essi viene codificato
mettendo 0 al primo bit e riepiendo con uno ciascuno degli undici bit dell’esponente. I 52 bit per
la mantissa sono tutti zero. Questo spiega perché non è possibile usare undici bit uno per formare
un esponente di un numero floating. E possibile far precedere inf da -, per identificare –inf. Esso
consiste di 12 bit uno e i restanti 52 zero.
La costante nan.
Se si eseguono operazioni che danno luogo a forme indeterminate, la risposta è
indeterminata che per il matlab è la costantee nan. Questa è codificata con 13 bit uguali a uno e i
restanti 51 bit uguali a zero.
La precisione
Come già riferito la precisione matlab è eps = 2-52 ≈ = 2.2204 × 10-16. Questo vuol dire che la
funzione floating commette su un numero rappresentabile un errore relativo tale da conservare
circa 16 cifre decimali in base 10. Risulta
Fl(x) = x( 1 + ε), | ε | < eps
L’errore eps non è mai raggiunto e poiché a volta l’aritmetica arrotonda invece di troncare, capita
che l’errore può essere inferiore a ε/2.
Numeri denormalizzati
Sotto realmin il Matlab non mette automaticamente zero, ma alcuni numeri non in
rappresentazione floating point standard, detti denormalizzati. Quando si scende sotto una certa
soglia il suo under flow è lo zero.
Esempi.
Vediamo come fisicamente si realizza il numero in base 10, x = 12. In base 2, x ha mantissa
.11 = ½ + ¼ = .75 ed esponente 4. Infatti 16 × .75 = 12. Quindi il primo bit è zero perché si tratta di
un numero positivo. All’esponente 4 sommiamo 1022 ottenendo 1026. Trasformiamo 1026 in
base 2 , ottenendo 10000000010. Questi sono gli undici bit dell’esponente. I 52 bit della mantissa
sono riempiti il primo con uno e i restanti con zero ( il primo bit uno è sottinteso). In questo
esempio sono stati utilizzati tutti gli undici bit per l’esponente. Nel caso in cui sommando 1022
all’esponente e trasformando in base 2 si ottiene un numero con totale cifre inferiore a undici, si
fa precedere il numero di tanti zeri fino a riempire hli undici bit.
Per esempio, sia x = -8/25 = .32. I)n base 2, .32= -.01000001…., e in floating point , x = (-.100001..,1)2. All’esponente va sommato 1022 ottenendo 1021 che in base 2 diventa 1111111101. Il primo
bit è 1 ( numero negativo) e occorre far precedere la sequenza di 10 bit trovata per 1021 da un
bit 0 per riempire blt undici bit dedicati all’esponente. Poi la mantissa fisica comincia con 4 zeri ( la
prima cifra uno è sottintesa) seguita da 1 ed altre cifre troncato o arrotondando sull’ultima 52esima cifra.