[Algoritmi] Rappresentazione in virgola mobile

Sassy3
Salve a tutti :)
Ho passato ore a cercare di capire il ragionamento da usare per risolvere questo genere di esercizio, ma purtroppo ancora non ci sono riuscita...
"è dato il seguente formato per la rappresentazione dei numeri in un calcolatore (campo complessivo 48 bit):
reali in virgola mobile con bit di segno, esponente in eccesso 63 (7 bit) e mantissa frazionaria e normalizzata in segno e valore 1.M.
Il problema non è solo per questo esercizio in particolare...ma per tutti gli esercizi che richiedono il massimo e minimo numero rappresentabile in virgola mobile. Potreste dirmi voi quale ragionamento utilizzate in questi casi?

Risposte
Vitalluni
Un numero in vigola mobile è nient'altro che una somma di potenze di due. L'esponente ti dice soltanto quanto vale la prima potenza, mentre la mantissa ti dice quali potenze seguono e quali no.

ad esempio se l'esponente vale 2 vuol dire che il primo bit della mantissa rappresenta
2^2 ovvero 4.

il secondo bit della mantissa rappresenta 2,
il terzo 1
il quarto 1/2
il quinto 1/4

l'esponente è un numero a complemento 2 mi pare.

48 bit vuol dire quindi che il valore massimo per l'esponente
è
2^47-1
mentre il valore minimo è
-2^47

La mantissa normalizzata vuol dire "far a scorrere a sinistra" i bit della mantissa fin quando il primo è un 1.
E poi ci aggiungi il bit di segno davanti.

Si tratta quindi di fare una somma di potenze di due se vuoi conoscere il valore "in formato decimale".
Per spiegarti anche le operazioni aritmetiche temo non basti questo post, comunque si tratta di usare gli stessi algoritmi per i numeri decimali imparati alle elementari, soltanto che qui sono in binario.

Per il tuo caso il numero massimo rappresentabile è facile
hai 7 bit per l'esponente giusto?
l'esponente massimo è
2^6-1 (che fa 63 mi quadra)
l'esponente minimo
-2^6

allora il tuo numero floating point potrà essere grande al massimo (avendo 48 bit, ci togli i 7 per l'esponente, ci togli il bit di segno e rimangono 40 bit di mantissa)

2^63 + 2^62 + 2^61 + ... + 2^23

se la somma di potenze di 2 continuasse fino a "+ 2^0" potresti scrivere che il numero massimo è esattamente
2^64 -1.
Purtroppo però nella mantissa non ci stanno tutti i termini, e scrivere il numero è poco agevole.

o ci metti

"quasi 2^64-1"

oppure la sommatoria. uguale a come ho messo io (anche li scriversi tutti 40 membri non molto bello)..

qulcuno controlli che non ho sparato assurdità^^ sono anche fuso.

notte

apatriarca
Qualche assurdità in effetti l'hai sparata, in particolare riguardo all'esponente. Non è in complemento a due, ma in eccesso \(63\). Questo vale (con bias diverso però) anche per i formati standard. Viene cioè memorizzato il numero che si ottiene sommando \(63\) all'esponente. Il valore più basso rappresentabile è quindi \(-63\) indipendentemente dal numero di bit e il numero più alto è \(127 - 63 = 64.\) Normalmente però si interpretano diversamente i due esponenti con tutti zeri o tutti uno. Se si guarda infatti lo standard IEEE 754 gli esponenti massimo e minimo appaiono più bassi di uno rispetto a quelli che ho scritto. Supponendo che non si faccia uso di tecniche simili, il calcolo è però quello che ho scritto.

Il numero massimo dovrebbe essere a questo punto \( (2^{41} - 1)\,2^{-40}\,2^{64} = 2^{65} - 2^{24}. \) Hai infatti \(40\) bit per l'esponente più uno che è sempre uguale a uno. Il valore massimo ce l'hai quando sono tutti uguali a uno. Per cui hai il valore \(2^{41} - 1\). Devi però spostare la virgola in modo che sia dopo il bit più significativo e quindi moltiplicare per \(2^{-40}\) e solo ora moltiplicare per \(2\) elevato il massimo esponente. Ma come ho detto già nel paragrafo precedente, sarebbe necessario anche conoscere l'eventuale presenza di numeri trattati in modo particolare. Già lo zero va trattato diversamente. In pratica il valore massimo sarebbe probabilmente inferiore.. Qualcosa come \( 2^{64} - 2^{23} \) probabilmente.

Sassy3
Non ho ben capito il ragionamento per il calcolo del valore massimo
Il numero massimo dovrebbe essere a questo punto (241−1)2−40264=265−224. Hai infatti 40 bit per l'esponente più uno che è sempre uguale a uno. Il valore massimo ce l'hai quando sono tutti uguali a uno.

quei 40 sono i bit della mantissa?

Sassy3
quindi nessuno mi può dare una risposta? :(

apatriarca
Sì, ho scritto esponente al posto di mantissa.. Per l'esponente hai ovviamente solo 7 bit..

Sassy3
ok, allora è tutto chiaro...grazie mille :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.