Salta al contenuto
Note per Studenti Numeri in virgola mobile IEEE 754

Numeri in virgola mobile IEEE 754

In questa pagina 8
In questa pagina 4

Virgola fissa e virgola mobile

  • Virgola fissa: un numero fissato di bit dopo la virgola (es. 8 bit di cui 4 frazionari: 0101,1000=5,50101{,}1000 = 5{,}5). Semplice, ma intervallo e precisione sono fissi.
  • Virgola mobile: notazione scientifica in base 2, ± 1,m⋅2E\pm\, 1{,}m \cdot 2^{E}. Con lo stesso numero di bit copre valori molto piccoli e molto grandi, con precisione relativa costante.

Un numero si normalizza spostando la virgola finché resta una sola cifra 1 a sinistra: 1101,01=1,10101⋅231101{,}01 = 1{,}10101 \cdot 2^3; 0,00101=1,01⋅2−30{,}00101 = 1{,}01 \cdot 2^{-3}.

Formato IEEE 754

x=(−1)S⋅1,M⋅2 E−biasx = (-1)^S \cdot 1{,}M \cdot 2^{\,E - \text{bias}}

Formato Bit Segno SS Esponente EE Mantissa MM Bias Cifre decimali
singola precisione 32 1 8 23 127 ≈ 7
doppia precisione 64 1 11 52 1023 ≈ 16

Da decimale a IEEE 754 (singola)

Esempio: −12,375-12{,}375.

  1. Segno: negativo → S=1S = 1.
  2. Binario: 12=110012 = 1100, 0,375=0,0110{,}375 = 0{,}011 (vedi Sistemi di numerazione posizionaliNotazione posizionale in base b; conversioni tra base 10, 2, 8 e 16 per interi (divisioni successive) e per parti frazionarie (moltiplicazioni successive); numeri periodici in binario.Sistemi di numerazione posizionali →) → 1100,0111100{,}011.
  3. Normalizzo: 1,100011⋅231{,}100011 \cdot 2^3.
  4. Esponente: E=3+127=130=1000 0010E = 3 + 127 = 130 = 1000\,0010.
  5. Mantissa: i bit dopo la virgola, completati a 23 con zeri: 1000 1100 0000 0000 0000 0001000\,1100\,0000\,0000\,0000\,000.

1⏟S 1000 0010⏟E 1000 1100 0000 0000 0000 000⏟M\underbrace{1}_{S}\ \underbrace{1000\,0010}_{E}\ \underbrace{1000\,1100\,0000\,0000\,0000\,000}_{M}

Raggruppando a 4 bit: 1100 0001 0100 0110 0000⋯=C1460000161100\,0001\,0100\,0110\,0000\dots = \text{C1460000}_{16}.

Secondo esempio, numero piccolo: 0,15625=0,001012=1,01⋅2−30{,}15625 = 0{,}00101_2 = 1{,}01 \cdot 2^{-3} → S=0S = 0, E=124=0111 1100E = 124 = 0111\,1100, M=0100…0M = 0100\dots0 → 3E20000016\text{3E200000}_{16}.

Da IEEE 754 a decimale

Esempio: 42C8000016\text{42C80000}_{16}.

0100 0010 1100 1000 0000⋯=0⏟S 1000 0101⏟E 1001 0000…⏟M0100\,0010\,1100\,1000\,0000\dots = \underbrace{0}_{S}\ \underbrace{1000\,0101}_{E}\ \underbrace{1001\,0000\dots}_{M}

E=133E = 133 → esponente 133−127=6133 - 127 = 6; valore +1,10012⋅26=11001002=100+1{,}1001_2 \cdot 2^6 = 1100100_2 = 100.

Valori speciali

Esponente EE Mantissa MM Significato
00 00 ±0\pm 0
00 ≠0\neq 0 denormalizzato: (−1)S⋅0,M⋅2−126(-1)^S \cdot 0{,}M \cdot 2^{-126}
1…2541 \dots 254 qualsiasi normalizzato
255255 (tutti 1) 00 ±∞\pm\infty (es. 1/01/0, overflow)
255255 ≠0\neq 0 NaN (es. 0/00/0, −1\sqrt{-1})

I denormalizzati riempiono il buco tra 00 e il più piccolo normalizzato (underflow gradualei valori scendono verso zero perdendo precisione un bit alla volta invece di saltare di colpo a zero).

Intervallo e precisione (singola)

  • Massimo normalizzato: (2−2−23)⋅2127≈3,4⋅1038(2 - 2^{-23}) \cdot 2^{127} \approx 3{,}4 \cdot 10^{38}.
  • Minimo normalizzato positivo: 2−126≈1,18⋅10−382^{-126} \approx 1{,}18 \cdot 10^{-38}.
  • Distanza tra due float consecutivi con esponente ee: 2e−232^{e-23}. Vicino a 1 è 2−23≈1,2⋅10−72^{-23} \approx 1{,}2 \cdot 10^{-7} (epsilon di macchinadistanza tra 1 e il float successivo); vicino a 224≈1,7⋅1072^{24} \approx 1{,}7 \cdot 10^7 è 2: da lì in poi non tutti gli interi sono rappresentabili.
  • Overflow: esponente troppo grande → ∞\infty. Underflow: troppo piccolo → denormalizzato o 0.

Arrotondamento e operazioni

  • I bit in più si arrotondano; l'arrotondamento predefinito è al più vicino, pari in caso di parità. 0,10{,}1 ha mantissa periodica e viene arrotondato, per cui 0,1+0,2≠0,30{,}1 + 0{,}2 \neq 0{,}3 esattamente.
  • Somma: si allinea l'esponente minore al maggiore spostando a destra la sua mantissa, si sommano le mantisse, si rinormalizza e si arrotonda. Con esponenti molto diversi il numero piccolo si perde: in singola 224+1=2242^{24} + 1 = 2^{24}.
  • Prodotto: si moltiplicano le mantisse e si sommano gli esponenti (togliendo un bias: E1+E2−127E_1 + E_2 - 127).
  • La somma non è associativa: (a+b)+c(a + b) + c può differire da a+(b+c)a + (b + c).

Errori tipici

  • Dimenticare il bias (scrivere E=3E = 3 invece di 130130) o metterlo con il segno sbagliato nella decodifica.
  • Includere l'1 nascosto nei 23 bit di mantissa.
  • Raggruppare in esadecimale partendo dalla mantissa invece che dal bit di segno: i 32 bit vanno presi nell'ordine S,E,MS, E, M e divisi in 8 gruppi da 4.

Versione ripasso

Virgola mobile: ±1,m⋅2E\pm 1{,}m \cdot 2^E, precisione relativa costante. Normalizzare: 1101,01=1,10101⋅231101{,}01 = 1{,}10101 \cdot 2^3.

Formato

x=(−1)S⋅1,M⋅2 E−biasx = (-1)^S \cdot 1{,}M \cdot 2^{\,E - \text{bias}}

Conversione

−12,375-12{,}375: S=1S = 1; 12=110012 = 1100, 0,375=0,0110{,}375 = 0{,}011 (Sistemi di numerazione posizionaliNotazione posizionale in base b; conversioni tra base 10, 2, 8 e 16 per interi (divisioni successive) e per parti frazionarie (moltiplicazioni successive); numeri periodici in binario.Sistemi di numerazione posizionali →) →\to 1,100011⋅231{,}100011 \cdot 2^3; E=130=1000 0010E = 130 = 1000\,0010; M=1000 1100 0…M = 1000\,1100\,0\dots ⇒\Rightarrow C146000016\text{C1460000}_{16}. 0,15625=1,01⋅2−30{,}15625 = 1{,}01 \cdot 2^{-3}: E=124E = 124, 3E20000016\text{3E200000}_{16}. Inverso: 42C8000016=0 1000 0101 1001 0…\text{42C80000}_{16} = 0\ 1000\,0101\ 1001\,0\dots: E=133E = 133, esponente 66, 1,10012⋅26=1001{,}1001_2 \cdot 2^6 = 100.

Valori speciali

E=0E = 0: M=0M = 0 vale ±0\pm 0, M≠0M \ne 0 denormalizzato 0,M⋅2−1260{,}M \cdot 2^{-126} (underflow gradualei valori scendono verso zero perdendo un bit di precisione alla volta); E=255E = 255: M=0M = 0 ±∞\pm\infty, M≠0M \ne 0 NaN.

Intervallo e operazioni

  • Massimo ≈3,4⋅1038\approx 3{,}4 \cdot 10^{38}, minimo normalizzato 2−1262^{-126}. Distanza tra float consecutivi: 2e−232^{e-23}; vicino a 1 è epsilon di macchinadistanza tra 1 e il float successivo 2−232^{-23}; oltre 2242^{24} non tutti gli interi sono rappresentabili.
  • Arrotondamento al più vicino, pari in caso di parità; 0,1+0,2≠0,30{,}1 + 0{,}2 \ne 0{,}3.
  • Somma: si allinea l'esponente minore spostando la mantissa, si somma, si rinormalizza (224+1=2242^{24} + 1 = 2^{24}); non è associativa. Prodotto: mantisse moltiplicate, esponenti sommati (E1+E2−127E_1 + E_2 - 127).

Errori tipici: dimenticare il bias; contare l'1 nascosto nei 23 bit; raggruppare in esadecimale non da SS.

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata