Per il floating point a 32 bit, il valore massimo è mostrato nella Tabella III:
0.9999998 x 2^127 represented in hex as: mansissa=7FFFFF, exponent=7F.
Possiamo decomporre la mantissa / esponente in un valore decimale (chiuso) come segue:
7FFFFF <base-16> = 8,388,607 <base-10>.
Ci sono 23 bit di significato, quindi dividiamo 8.388.607 di 2 ^ 23.
8,388,607 / 2^23 = 0.99999988079071044921875 (see Table III)
per quanto riguarda l'esponente:
7F <base-16> = 127 <base-10>
e ora moltiplichiamo la mantissa di 2 ^ 127 (l'esponente)
8,388,607 / 2^23 * 2^127 =
8,388,607 * 2^104 = 1.7014116317805962808001687976863 * 10^38
Questo è il più grande valore a virgola mobile a 32 bit, poiché viene utilizzata la mantissa più grande e l'esponente più grande.
Il punto mobile a 48 bit aggiunge 16 bit di mantissa di rilevanza minore, ma lascia l'esponente della stessa dimensione. Quindi, il valore massimo sarebbe rappresentato in esadecimale come
mansissa=7FFFFFFFFF, exponent=7F.
di nuovo, possiamo calcolare
7FFFFFFFFF <base-16> = 549,755,813,887 <base-10>
l'esponente massimo è ancora 127, ma dobbiamo dividere per [23 + 16 = 39, quindi:] 2 ^ 39.
127-39 = 88, quindi basta moltiplicare per 2 ^ 88:
549,755,813,887 * 2^88 =
1.7014118346015974672186595864716 * 10^38
Questo è il più grande valore in virgola mobile a 48 bit perché abbiamo usato la mantissa più grande possibile e il più grande esponente possibile.
Quindi i valori massimi sono:
1.7014116317805962808001687976863 * 10^38, for 32-bit, and,
1.7014118346015974672186595864716 * 10^38, for 48-bit
Il valore massimo per 48-bit è leggermente più grande di 32-bit, il che equivale a perché alcuni bit vengono aggiunti alla fine della mantissa.
(Per essere precisi il numero massimo per il formato a 48 bit può essere espresso come un numero binario che consiste di 39 1 seguiti da 88 0.)
(Il più piccolo è solo il negativo di questo valore. Il più vicino allo zero senza zero può anche essere facilmente calcolato come sopra: usa la mantissa più piccola possibile (positiva): 0000001 e l'esponente più piccolo possibile: 80 in hex, o -128 in decimale)
FYI
Alcuni formati in virgola mobile utilizzano un mantello nascosto% non1
nella mantissa (ciò consente un ulteriore bit di precisione nella mantissa, come segue: la prima cifra binaria di tutti i numeri (eccetto 0, o denormali, vedi sotto ) è un 1
, quindi non dobbiamo memorizzare quel 1
, e abbiamo un ulteriore bit di precison). Questo particolare formato non sembra farlo.
Altri formati in virgola mobile consentono la mantissa denormalizzata, che consente di rappresentare numeri (positivi) più piccoli del più piccolo esponente, scambiando bit di precisione per poteri aggiuntivi (negativi) di 2. Questo è facile da supportare se non supporta anche il nascosto un po ', un po' più difficile se lo fa.
8.388.607 / 2 ^ 23 è il valore che otterresti con mantissa = 0x7FFFFF ed esponente = 0x00. Non è il valore a singolo bit, ma piuttosto il valore con una mantissa completa e neutrale, o più specificamente, un zero .
Il motivo per cui questo valore non è direttamente 8388607 e richiede una divisione (per 2 ^ 23 e quindi è inferiore a quello che ci si potrebbe aspettare) è perché l'implicito punto di radix si trova in fronte della mantissa, piuttosto che dopo . Quindi, pensa +/-.111111111111111111111
(un bit di segno, seguito da un punto di radix, seguito da ventitré 1 bit) per la mantissa e +/- 111111111111 (nessun punto di radix qui, solo un numero intero, in questo caso, 127) per l'esponente.
mantissa = 0x7FFFFF con esponente = 0x7F è il valore più grande che corrisponde a 8388607 * 2 ^ 104, dove 104 viene da 127-23: ancora, sottraendo 23 poteri di due perché la mantissa ha il punto di radix all'inizio. Se il punto di radix era alla fine, allora il valore più grande (0x7FFFFF, 0x7F) sarebbe in effetti 8,388,607 * 2 ^ 127.
Tra l'altro, ci sono modi possibili per considerare un valore a un bit per la mantissa. Uno è mantissa = 0x400000 e l'altro è mantissa = 0x000001. senza considerare il punto di radix o l'esponente, il primo è 4.194.304 e il secondo è 1. Con un esponente zero e considerando il punto radix, il primo è 0.5 (decimale) e il secondo è 0.00000011920928955078125. Con un esponente massimo (o minimo) possiamo calcolare i valori massimi e minimi dei bit singoli.
(Si noti che il secondo formato in cui la mantissa ha zeri iniziali verrebbe considerato denormalizzato in alcuni formati numerici e la sua rappresentazione normalizzata sarebbe 0x400000 con un esponente di -23).