Calcolatore di precisione in virgola mobile
Dati di input
| Formato | Doppia (64 bit) |
|---|---|
| Valore | 1.000 |
Calcolatore di precisione in virgola mobile
Determina l'epsilon di macchina, le cifre decimali significative e la spaziatura dei valori rappresentabili (ULP) per i formati IEEE 754 a precisione mezza, singola, doppia e quadrupla.
Dati di input
Formato e valore
Risultati
Inserisci un valore per visualizzare i risultati.
Precisione
Dettagli
La precisione in virgola mobile
I computer memorizzano i numeri reali in un numero finito di bit, quindi la maggior parte dei valori viene conservata solo in modo approssimato. Questo calcolatore riporta la precisione dei formati binari IEEE 754 — mezza, singola, doppia e quadrupla — calcolando l'epsilon di macchina, il numero di cifre decimali affidabili e la spaziatura tra i numeri rappresentabili (l'ULP) a un valore scelto. Insieme, questi elementi spiegano perché l'aritmetica in virgola mobile è precisa ma non esatta.
Come un numero in virgola mobile memorizza un valore
Un numero IEEE 754 è scritto come un segno, una mantissa (le cifre significative) e un esponente che lo scala per una potenza di due — in modo molto simile alla notazione scientifica in base 2. Ogni formato fissa quanti bit ottiene la mantissa: la precisione mezza ha 11 bit di mantissa, la singola ne ha 24, la doppia 53 e la quadrupla 113 (ciascun conteggio include un bit principale implicito). Più bit ha la mantissa, più fine è la risoluzione.
Epsilon di macchina
La misura più pulita della risoluzione è l'epsilon di macchina, la differenza tra 1,0 e il successivo numero rappresentabile al di sopra di esso:
dove è il numero di bit della mantissa. Per la precisione doppia, . Questo è un limite relativo: qualsiasi numero reale viene memorizzato con un errore relativo al più pari a . Il numero affidabile di cifre decimali significative ne deriva direttamente, come — circa 15,7 per la precisione doppia.
ULP: una spaziatura che cresce con la grandezza
L'epsilon di macchina descrive la spaziatura vicino a 1,0, ma i numeri in virgola mobile non sono distribuiti in modo uniforme. La distanza tra valori rappresentabili consecutivi, l'unità nell'ultima posizione (ULP), scala con la grandezza:
Vicino a 1 la spaziatura è l'epsilon di macchina; vicino a 1000 è circa mille volte maggiore. È per questo che la virgola mobile mantiene una precisione relativa costante ma perde precisione assoluta man mano che i numeri crescono.
Esempio svolto
Prendiamo la precisione doppia e il valore 1000. L'esponente è , quindi:
ULP(1000)=29−52=2−43≈1,14×10−13Il massimo errore di arrotondamento vicino a 1000 è la metà di questo, circa . Pertanto un numero a precisione doppia può distinguere 1000 da 1000,0000000000001 ma non da un valore che differisce nella sedicesima cifra significativa.
Perché 0,1 non è esatto
La virgola mobile binaria può rappresentare solo somme di potenze di due, e 0,1 non ha un'espansione binaria finita — così come un terzo non ne ha una in decimale. Viene quindi arrotondato al valore rappresentabile più prossimo, motivo per cui 0.1 + 0.2 non è esattamente uguale a 0.3 nella maggior parte dei linguaggi. La discrepanza è dell'ordine dell'epsilon di macchina e di norma innocua, ma si accumula nel corso di calcoli lunghi ed è il motivo per cui il denaro viene spesso memorizzato come intero o in un tipo decimale anziché come numero in virgola mobile. Per sapere come gli interi stessi vengono codificati in binario, vedi il Complemento a due.
Domande frequenti (FAQ)
Che cos'è l'epsilon di macchina?
L'epsilon di macchina è la differenza tra 1,0 e il successivo numero in virgola mobile maggiore di 1,0. È pari a 2 elevato a meno il numero di bit frazionari della mantissa; per la precisione doppia ciò corrisponde a 2⁻⁵², circa 2,22 × 10⁻¹⁶.
L'epsilon di macchina misura la risoluzione relativa del formato: qualsiasi numero reale viene memorizzato con un errore relativo non superiore alla metà dell'epsilon. È il riferimento standard per stabilire quante cifre un formato può trasportare in modo affidabile.
Che cos'è un ULP?
ULP è l'acronimo di "unità nell'ultima posizione": la distanza tra un numero in virgola mobile e il successivo numero rappresentabile al di sopra di esso.
A differenza dell'epsilon di macchina, che è fisso, l'ULP cresce con la grandezza: vicino a 1 la spaziatura è l'epsilon di macchina, vicino a 1000 è circa mille volte maggiore, e vicino a un miliardo ancora maggiore. Poiché la spaziatura scala con il valore, i numeri in virgola mobile mantengono una precisione relativa pressoché costante su tutto il loro intervallo, mentre la precisione assoluta degrada man mano che i numeri crescono.
Perché 0,1 non può essere memorizzato in modo esatto?
La virgola mobile binaria può rappresentare solo somme di potenze di due. La frazione decimale 0,1 non ha un'espansione binaria finita — così come un terzo non ha un'espansione decimale finita — quindi viene arrotondata al valore rappresentabile più prossimo, che è leggermente maggiore di 0,1.
È per questo che 0,1 + 0,2 non è esattamente uguale a 0,3 nella maggior parte dei linguaggi. L'errore è minuscolo, dell'ordine dell'epsilon di macchina, ma si accumula nel corso di molte operazioni ed è il motivo per cui i valori monetari vengono spesso memorizzati come interi o in tipi decimali.
Quante cifre decimali contiene ciascun formato?
Il conteggio affidabile delle cifre decimali significative è approssimativamente il numero di bit frazionari della mantissa moltiplicato per il logaritmo di 2 (circa 0,301). La precisione mezza fornisce circa 3 cifre, la singola circa 7, la doppia circa 15-16 e la quadrupla circa 34.
Sono le cifre che si possono rappresentare in andata e ritorno in sicurezza; stampare più cifre di queste espone gli artefatti di arrotondamento della rappresentazione binaria anziché una precisione reale.
Da provare dopo
Complemento a due
Converti un intero con segno nella rappresentazione binaria e decimale in complemento a due, o decodifica una stringa binaria nel valore decimale con segno. Scegli tra registri a 8, 16, 32 o 64 bit.