Lo standard IEEE per l'aritmetica in virgola mobile (IEEE 754) è uno standard tecnico per il calcolo in virgola mobile stabilito nel 1985 dall' Istituto di ingegneri elettrici ed elettronici (IEEE) . Lo standard affrontava molti problemi riscontrati nelle diverse implementazioni in virgola mobile che le rendevano difficili da usare in modo affidabile e ne riducevano la portabilità. La virgola mobile dello standard IEEE 754 è oggi la rappresentazione più comune dei numeri reali sui computer, inclusi PC basati su Intel, Mac e la maggior parte delle piattaforme Unix.
Esistono diversi modi per rappresentare un numero in virgola mobile, ma nella maggior parte dei casi IEEE 754 è il più efficiente. IEEE 754 ha 3 componenti di base:
- Il Segno della Mantissa –
Questo è semplice come il nome. 0 rappresenta un numero positivo mentre 1 rappresenta un numero negativo. - L’esponente parziale –
Il campo dell'esponente deve rappresentare sia gli esponenti positivi che quelli negativi. Viene aggiunto un bias all'esponente effettivo per ottenere l'esponente memorizzato. - La Mantissa Normalizzata –
La mantissa è parte di un numero in notazione scientifica o di un numero in virgola mobile, costituito dalle sue cifre significative. Qui abbiamo solo 2 cifre, cioè O e 1. Quindi una mantissa normalizzata è una con un solo 1 a sinistra del decimale.
I numeri IEEE 754 sono divisi in due in base ai tre componenti precedenti: precisione singola e precisione doppia.
| TIPI | CARTELLO | ESPONENTE DIVERSO | MANTISA NORMALIZZATA | PREGIUDIZIO |
|---|---|---|---|---|
| Precisione singola | 1(31esimo bit) | 8(30-23) | 23(22-0) | 127 |
| Doppia precisione | 1(63esimo bit) | 11(62-52) | 52(51-0) | 1023 |
Esempio -
85.125 85 = 1010101 0.125 = 001 85.125 = 1010101.001 =1.010101001 x 2^6 sign = 0 1. Single precision: biased exponent 127+6=133 133 = 10000101 Normalised mantisa = 010101001 we will add 0's to complete the 23 bits The IEEE 754 Single precision is: = 0 10000101 01010100100000000000000 This can be written in hexadecimal form 42AA4000 2. Double precision: biased exponent 1023+6=1029 1029 = 10000000101 Normalised mantisa = 010101001 we will add 0's to complete the 52 bits The IEEE 754 Double precision is: = 0 10000000101 0101010010000000000000000000000000000000000000000000 This can be written in hexadecimal form 4055480000000000>
Valori speciali: IEEE ha riservato alcuni valori che possono presentare ambiguità.
- Zero –
Zero è un valore speciale indicato con un esponente e una mantissa pari a 0. -0 e +0 sono valori distinti, sebbene entrambi siano uguali.
- Denormalizzato –
Se l'esponente è composto da tutti zeri, ma la mantissa no, il valore è un numero denormalizzato. Ciò significa che questo numero non ha un presupposto iniziale prima del punto binario. - Infinito –
I valori +infinito e -infinito sono indicati con un esponente di tutti uno e una mantissa di tutti zeri. Il bit di segno distingue tra infinito negativo e infinito positivo. Le operazioni con valori infiniti sono ben definite in IEEE. - Non un numero (NAN) –
Il valore NAN viene utilizzato per rappresentare un valore che è un errore. Questo è rappresentato quando il campo esponente è tutto uno con un bit di segno zero o una mantissa che non sia 1 seguito da zeri. Questo è un valore speciale che potrebbe essere utilizzato per denotare una variabile che non contiene ancora un valore.
| ESPONENTE | MANTISA | VALORE |
|---|---|---|
| 0 | 0 | 0 esatto |
| 255 | 0 | Infinito |
| 0 | non 0 | denormalizzato |
| 255 | non 0 | Non un numero (NAN) |
Simile per Doppia precisione (sostituisce semplicemente 255 con 2049), Intervalli di numeri in virgola mobile:
| Denormalizzato | Normalizzato | Decimale approssimativo | |
|---|---|---|---|
| Precisione unica | ±2-149a (1 – 2-23)×2-126 | ±2-126a (2 – 2-23)×2127 | ± circa 10-44.85a circa 1038.53 |
| Doppia precisione | ±2-1074a (1 – 2-52)×2-1022 | ±2-1022a (2 – 2-52)×21023 | ± circa 10-323.3a circa 10308.3 |
L'intervallo di numeri in virgola mobile positivi può essere suddiviso in numeri normalizzati e numeri denormalizzati che utilizzano solo una parte della precisione delle frazioni. Poiché ogni numero a virgola mobile ha un valore corrispondente negato, gli intervalli sopra sono simmetrici attorno allo zero.
Esistono cinque intervalli numerici distinti che i numeri in virgola mobile a precisione singola non sono in grado di rappresentare con lo schema presentato finora:
- Numeri negativi inferiori a – (2 – 2-23) × 2127(overflow negativo)
- Numeri negativi maggiori di –2-149(underflow negativo)
- Zero
- Numeri positivi inferiori a 2-149(underflow positivo)
- Numeri positivi maggiori di (2 – 2-23) × 2127(eccesso positivo)
L'overflow in genere significa che i valori sono diventati troppo grandi per essere rappresentati. L'underflow è un problema meno serio perché denota semplicemente una perdita di precisione, che è garantita essere molto prossima allo zero.
Di seguito è riportata la tabella dell'intervallo effettivo totale dei numeri a virgola mobile IEEE finiti:
| Binario | Decimale | |
|---|---|---|
| Separare | ±(2-2-23) × 2127 | circa ± 1038.53 |
| Doppio | ±(2-2-52) × 21023 | circa ± 10308,25 |
Operazioni speciali –
| Operazione | Risultato |
|---|---|
| n ÷ ±Infinito | 0 |
| ±Infinito × ±Infinito | ±Infinito |
| ±diverso da Zero ÷ ±0 | ±Infinito |
| ±finito × ±infinito | ±Infinito |
| Infinito + Infinito Infinito – -Infinito | +Infinito |
| -Infinito – Infinito -Infinito + – Infinito | – Infinito |
| ±0 ÷ ±0 | NaN |
| ±Infinito ÷ ±Infinito | NaN |
| ±Infinito × 0 | NaN |
| NaN == NaN | Falso |