Sei sulla pagina 1di 17

Corso di Calcolatori Elettronici

IEEE 754
Approfondimenti ed esempi

Corso di Laurea in
Ingegneria Elettronica e Informatica

ing. Ciro Marturiello


IEEE 754
■ Mantissa = d0 . d-1...d-k
■ Lo standard IEEE754 usa una notazione scientifica normalizzata, con d0 = 1
■ Poiché d0 = 1 è sempre uguale a 1, nella rappresentazione d0 è implicito
■ si guadagna così un bit per la rappresentazione della mantissa e si aumenta,
allo stesso tempo, l’accuratezza dei numeri razionali espressi
■ Rappresentazione standard:

dove il numero rappresentato è: (-1)S• (1 + m) • 2e

■ Zero viene rappresentato come:

si noti che in generale, se m = 00...0, il valore rappresentato 1+m = 1 ≠ 0


IEEE 754
■ Come rappresentare i numeri FP in modo che sia facile realizzare il confronto?
■ Vorremmo poterli confrontare come se fossero interi
■ Lo standard IEEE754 ha scelto:
■ la posizione del segno in modo che sia facile il test >=0 , <0
■ la posizione dell’esponente (in posizione più significativa) per semplificare
l’ordinamento dei numeri rappresentati
■ Maggiore è l’esponente, maggiore è il valore assoluto del numero
■ Gli esponenti negativi (in complemento a due) rappresentano però un problema per questo
tipo di ordinamento. Infatti:
■ esponente negativo ==> secondo bit più “significativo” uguale a 1
■ un numero FP positivo, ma con un esponente negativo, appare come un numero intero

grande
Esempio: 1.0 • 2-1

Esempio: 1.0 • 21
IEEE 754
■ Una buona rappresentazione che semplifica il confronto dovrebbe denotare
• l’esponente “più negativo” come 00...02
• l’esponente “più positivo” come 11...12
■ Lo standard IEEE754 utilizza per questo motivo la notazione polarizzata
■ Singola precisione
• polarizzazione pari a 127 = 011111112
• Doppia precisione
• polarizzazione pari a 1023 = 011111111112
■ Ad esempio:

• esponente -125 rappresentato come -125+127 = 000000102


• esponente -1 rappresentato come -1+127 = 126 = 011111102
• esponente 0 rappresentato come 0 +127 = 127 = 011111112
• esponente +1 rappresentato come 1+127 = 128 = 100000002
• esponente +125 rappresentato come 125+127=252=111111002
IEEE 754
■ Il valore di un numero in notazione polarizzata è quindi:
(-1)S • (1+m) • 2(e - polazizzazione)

■ Con la notazione polarizzata gli esponenti variano


• da -126 a +127 [1-254] per la singola precisione
• da -1022 a +1023 [1-2046] per la doppia precisione

■ Si consideri che:
• l’esponente 00...0 è così riservato per lo zero
• l’esponente 11...1 è così riservato per casi particolari (numero fuori dall’insieme
dei valori rappresentabili)
IEEE 754
Esempio: scrivere - 0. 2510 in notazione FP IEEE754:

- 0. 2510 = - 0. 012 = - 1. 0 • 2-2 = (-1)1 • (1 + 0.0) • 2 (125-127)

esponente (polarizzato): -2+127=125


mantissa: 0

Esempio: Quale numero decimale rappresenta la seguente sequenza di bit, letta secondo lo standard IEEE754?

esponente: 000010112 = 1110

mantissa: 0.012 = 0. 2510

Il numero rappresentato è: (-1)1 • (1+ 0.25) • 2(11-127) = - 1. 25 • 2 (-116)


IEEE 754

■ Esempio: scrivere -10. 62510 in notazione floating point, usando lo standard IEEE754

- 10. 62510 = - (10 + 0.5 +0.125) = - (10 + 1/2 + 1/8) =

= - 1010. 1012 = - 1. 010101 • 23 =

= (-1)1 • (1 + 0.010101) • 2 (130-127)


IEEE 754 – Somma di numeri
Algoritmo per sommare numeri FP

Esempio: eseguire (510 + 3.62510)


assumendo una precisione di 4 bit

510 = 1012 = 1.01 • 22

3.62510 = 11.1012• 20 = 1.1101• 21

Shifting: 3.62510 = 0.11101• 22

Somma: 1.01000 +
0.11101 =
----------------
10.00101 • 22
Normalizzazione: 1.000101 • 23

Arrotondamento: 1.0001 • 23
IEEE 754 – Somma di numeri

Esercizio: eseguire la somma algebrica di:

N1=

N2=

N1 < N2 con |N1| > |N2|  quindi segno negativo

Esponente:

N1: 100000102 = 13010 ==> 130 - 127 = 3


N2: 011111102 = 12610 ==> 126 - 127 = -1

Allineamento mantissa di N2 (shift a destra):

1.1111 • 2-1 ==> 0.00011111 • 23


IEEE 754 – Somma di numeri
Somma algebrica delle mantisse:
Esprimo le mantisse in complemento a due (aggiungo un bit
per segno)

N1 : 01.01010100 ma N1 è negativo  10.10101100


N2 : 00.00011111 ma N2 è positivo  00.00011111

Somma:
10.10101100 +
00.00011111 =
--------------------
10.11001011 numero negativo!

Per ottenere il “modulo” della mantissa, necessario


complementare.
Risultato: 1.00110101
IEEE 754 – Somma di numeri

Normalizzazione:
La mantissa ottenuta è già normalizzata: 1.00110101
per cui non è necessario modificare l’esponente del risultato

Arrotondamento/Troncamento
La mantissa ottenuta è rappresentabile su 23 bit. Quindi non dobbiamo introdurre errori
nella rappresentazione (la rappresentazione del numero è in questo caso accurata)

Numero FP risultato:

sris = 1
eris = 130
mris= 001101010…0
IEEE 754 – Somma di numeri
Conclusione :

N1: +

N2: =

--------------------------------------------------------------------------

RIS:
IEEE 754 – Somma di numeri
Circuito che realizza la somma di numeri FP
IEEE 754 – Somma di numeri
Somma FP: errori

■ L’aritmetica FP, a causa dei limiti di rappresentazione (mantissa limitata), può introdurre errori di
accuratezza nei risultati delle operazioni

■ Ad esempio, vediamo un esempio di calcolo erroneo, da cui possiamo desumere che la


somma in virgola mobile non è sempre associativa:
in generale, non è quindi vero che x+(y+z) = (x+y)+z

■ Il fenomeno si può osservare quando dobbiamo sommare due numeri molto grandi in valore
assoluto, ma di segno opposto, con altro un numero molto piccolo
x = 1.510 • 1038

y = - 1.510 • 1038 con x,y,z espressi in singola precisione z = 1.010

x+(y+z) = -1.5 • 1038 + (1.5 • 1038 + 1.0)


= -1.5 • 1038 + 1.5 • 1038 = 0.010

(x+y)+z = ( -1.5 • 1038 + 1.5 • 1038 ) + 1.0


= 0.0 + 1.0 = 1.010
Problema dell’approssimazione di numeri piccoli:
il formato IEEE 754 denormalizzato [1]

Il più piccolo numero positivo rappresentabile in formato IEEE 754 standard a precisione singola è
(si ricordi che l’esponente uguale a 0 è usato per indicare valori speciali come lo zero):
<0,00000001,00000000000000000000000> = 1,02 · 2-126 ≈ 1,17 * 10-38

Il più piccolo numero positivo successivo:


<0,00000001,00000000000000000000001> = 1,0000000000000000000000012 · (210)-126
= 2-126 + 2-149 ≈ 1,17 · 10-38 + 1,40 · 10-45

Ciò significa che usando il formato IEEE 754 standard, in prossimità dello zero avremo un
cambiamento nella linearità della quantizzazione: da 0 al più piccolo successivo ci sarà un salto
dell’ordine di 10-38 mentre per passi successivi i salti saranno dell’ordine di 10-45.
Problema dell’approssimazione di numeri piccoli:
il formato IEEE 754 denormalizzato [2]

Il più piccolo numero positivo rappresentabile in formato IEEE 754 denormalizzato a precisione
singola è (si ricordi il formato dei numeri denormalizzati: 0.f × 2-126 ):
<0,00000000,00000000000000000000001> = 0,000000000000000000000012 · 2-126
= 2-149 ≈ 1,40 * 10-45
Il più piccolo numero positivo successivo:
<0,00000000,00000000000000000000010> = 0,000000000000000000000102 · 2-126
= 2 * 2-149 ≈ 2,80 · 10-45
Problema dell’approssimazione di numeri piccoli:
il formato IEEE 754 denormalizzato [3]

Usando il formato IEEE 754 denormalizzato, in prossimità dello zero la


quantizzazione risulta lineare:
da 0 al più piccolo successivo ci sarà un salto dell’ordine di 10-45 così come
per passi successivi. In aggiunta il salto tra 0 ed il primo positivo successivo
risulta minore, e quindi migliore in termini di precisione ottenibile nei calcoli,
rispetto al formato IEEE 754 standard.

Lo svantaggio maggiore del formato denormalizzato rispetto al formato


standard è che richiede per l’esecuzione dei calcoli aritmetici di algoritmi più
complicati.

Potrebbero piacerti anche