Convertitore IEEE 754 per Numeri in Virgola Mobile
Converti float in binario e hex IEEE 754 online: FP16, FP32, FP64 e bfloat16. Valore memorizzato esatto, errore di arrotondamento e bit, 100% nel browser.
| Segno | |
| Esponente | |
| Mantissa |
- Hai inserito
- Effettivamente memorizzato
- Errore di arrotondamento
- Precedente
- Successivo
- ULP (dimensione del gap)
| Formato | Bit totali | Segno | Esponente | Mantissa | Bias | Valore finito massimo | Cifre decimali |
|---|---|---|---|---|---|---|---|
| binary16 (FP16) | 16 | 1 | 5 | 10 | 15 | 65504 | ~3.3 |
| bfloat16 | 16 | 1 | 8 | 7 | 127 | ≈3.39×10³⁸ | ~2.3 |
| binary32 (FP32) | 32 | 1 | 8 | 23 | 127 | ≈3.40×10³⁸ | ~7.2 |
| binary64 (FP64) | 64 | 1 | 11 | 52 | 1023 | ≈1.80×10³⁰⁸ | ~15.9 |
Cos'è la Virgola Mobile IEEE 754?
IEEE 754 è lo standard che definisce come i computer memorizzano i numeri reali in binario. Ogni valore è impacchettato in tre campi: un bit di segno, un esponente (memorizzato con un bias così da poter rappresentare sia grandezze enormi che minuscole) e una mantissa che contiene le cifre significative. Quasi ogni CPU, GPU e linguaggio di programmazione lo usa, ed è per questo che le stesse sorprese di arrotondamento compaiono allo stesso modo in JavaScript, Python, C e SQL.
L'intuizione chiave è che la virgola mobile binaria può rappresentare solo numeri della forma m × 2ⁿ. Le frazioni decimali come 0.1 sono frazioni periodiche infinite in base 2 — 0.000110011001100… — quindi il formato memorizza al loro posto il vicino rappresentabile più prossimo. In precisione singola quel vicino è 0.100000001490116119384765625; in precisione doppia è 0.1000000000000000055511151231257827021181583404541015625. Nessuno dei due è 0.1. Ogni stranezza a valle — 0.1 + 0.2 ≠ 0.3, somme che derivano, controlli di uguaglianza che falliscono — discende da questo singolo fatto, e questo convertitore lo rende visibile stampando il valore memorizzato esatto invece di un'approssimazione riarrotondata.
Lo standard riserva inoltre alcuni pattern di bit per i valori speciali. Un esponente tutto a uno codifica ±Infinity (mantissa zero) o NaN (mantissa diversa da zero); un esponente tutto a zero codifica lo zero con segno (mantissa zero) o i numeri subnormali (mantissa diversa da zero), che riempiono il divario di underflow accanto allo zero a precisione ridotta. I quattro formati coperti da questo strumento — binary16/FP16, bfloat16, binary32/FP32, binary64/FP64 — differiscono solo per quanti bit assegnano a ciascun campo: più bit di esponente significano più intervallo, più bit di mantissa significano più precisione. bfloat16, il preferito del machine learning, è semplicemente FP32 con i 16 bit inferiori di mantissa tagliati via: stesso intervallo, precisione molto più grossolana.
Un modello mentale utile è che i float rappresentabili formano una griglia sulla retta dei numeri il cui passo — una unità nell'ultima posizione, o ULP — raddoppia a ogni potenza di due. Vicino a 1.0 il passo della griglia di un double è circa 2.22 × 10⁻¹⁶; vicino a 2⁵³ è un intero, ed è per questo che i double non possono contare in modo affidabile oltre 2⁵³. Il pannello dei vicini di questo strumento mostra quella griglia direttamente: i valori rappresentabili precedente e successivo attorno a qualsiasi numero digiti, con il gap esatto tra loro.
// Float ↔ hex through the raw IEEE 754 bits (works in any browser / Node.js)
const buf = new DataView(new ArrayBuffer(8));
function floatToHex32(value) {
buf.setFloat32(0, value); // rounds to nearest even
return '0x' + buf.getUint32(0).toString(16).toUpperCase().padStart(8, '0');
}
function hexToFloat32(hex) {
buf.setUint32(0, parseInt(hex, 16));
return buf.getFloat32(0);
}
floatToHex32(0.1); // '0x3DCCCCCD'
floatToHex32(3.14159); // '0x40490FD0'
hexToFloat32('3DCCCCCD'); // 0.10000000149011612 Caratteristiche Principali
Quattro formati, una sola vista
Mezza (FP16), bfloat16, Singola (FP32) e Doppia (FP64) — cambia con un clic e l'intera pagina viene ricalcolata, così confrontare come lo stesso numero atterra in ciascun formato richiede pochi secondi.
Griglia di bit cliccabile
Ogni bit è un pulsante. Inverti il segno, ritocca l'esponente o modifica un bit di mantissa e osserva le viste decimale, esadecimale e binaria aggiornarsi all'istante — il modo più rapido per costruirsi un'intuizione della codifica.
Valore memorizzato esatto, non un'approssimazione
Lo strumento calcola l'espansione decimale completa dei bit memorizzati con aritmetica esatta a interi grandi — tutte le 55 cifre dello 0.1 di un double — più l'errore di arrotondamento esatto con segno rispetto a ciò che hai digitato.
Vicini e ULP
Vedi i valori rappresentabili precedente e successivo attorno al numero corrente e il gap esatto (ULP) tra loro — il passo della griglia che determina quanta precisione hai davvero a una data grandezza.
Valori speciali a portata di clic
I chip caricano ±0, ±Infinity, NaN, il più piccolo subnormale e il più grande valore finito del formato selezionato, con il badge di classificazione che indica cosa codifica il pattern di bit corrente.
Permalink condivisibili, zero upload
Copia link codifica il formato e l'esatto pattern di bit nell'URL — ideale per bug report, code review e didattica. Tutto viene eseguito nel tuo browser; nulla di ciò che digiti lascia la pagina.
Esempi di Conversione IEEE 754
0.1 in precisione singola — il classico errore di arrotondamento
0.1
0x3DCCCCCD — memorizzato in realtà come 0.100000001490116119384765625
Il decimale 0.1 non ha una rappresentazione binaria finita, quindi IEEE 754 memorizza al suo posto il valore rappresentabile più vicino. In precisione singola (FP32) quel valore è 0x3DCCCCCD, cioè esattamente 0.100000001490116119384765625 — circa 1.49 × 10⁻⁹ in eccesso. Lo strumento mostra questo valore memorizzato esatto e l'errore esatto, cifra per cifra, invece dello '0.1' arrotondato che il tuo linguaggio di programmazione ti ristampa. Questo singolo esempio spiega la maggior parte delle sorprese in virgola mobile, incluso perché 0.1 + 0.2 non è uguale a 0.3.
Da float a hex: 3.14159 in FP32
3.14159
0x40490FD0
Digita 3.14159 con Singola (FP32) selezionata e il campo hex mostra 0x40490FD0 — segno 0, esponente con bias 128 (quindi 2¹), mantissa 0x490FD0. Il valore effettivamente memorizzato è 3.141590118408203125, appena sopra quello che hai digitato. La forma esadecimale è quella che vedi nei dump di rete, nei buffer GPU, nelle viste dei registri e nei file binari serializzati, e la conversione funziona in entrambe le direzioni: incolla 40490FD0 nel campo hex per decodificarlo.
Massimo FP16: 65504 è dove finisce la mezza precisione
65504
0x7BFF — il più grande valore FP16 finito
La mezza precisione ha solo 5 bit di esponente e 10 bit di mantissa, quindi il suo più grande valore finito è 65504 (0x7BFF). Digita 65520 o un valore più grande e il risultato viene arrotondato a Infinity (0x7C00) — un rischio reale quando quantizzi modelli di machine learning in FP16. Passa a bfloat16 e lo stesso 65520 ci sta comodamente, perché bfloat16 conserva gli 8 bit di esponente di FP32 (intervallo) rinunciando a bit di mantissa (precisione). Questo compromesso è esattamente il motivo per cui il training ML preferisce bfloat16 mentre l'archiviazione compatta preferisce FP16.
−0 e +0: due pattern di bit diversi, un solo valore
-0
0x80000000 (FP32), mentre +0 è 0x00000000
IEEE 754 ha uno zero con segno: −0 imposta solo il bit di segno (0x80000000 in FP32), mentre +0 è tutto zeri. Risultano uguali in ogni linguaggio, eppure 1/−0 è −Infinity e 1/+0 è +Infinity, quindi la differenza è osservabile. Clicca sul bit di segno nello strumento per passare dall'uno all'altro e osserva il badge di classificazione restare su Zero mentre l'hex cambia — un'illustrazione in un solo clic del perché l'uguaglianza a livello di bit e l'uguaglianza numerica sono cose diverse.
Come Convertire Numeri IEEE 754 in Virgola Mobile
- 1
Scegli un formato in virgola mobile
Singola (FP32) è preselezionata. Passa a Doppia (FP64) per numeri in stile JavaScript/Python, oppure a Mezza (FP16) e bfloat16 per i formati a 16 bit usati nel machine learning e nella grafica.
- 2
Digita un numero decimale
Inserisci qualsiasi valore — 0.1, -2.5e3, 65504 — oppure usa i chip dei valori speciali per ±0, ±Infinity, NaN, il più piccolo subnormale e il più grande valore finito. La conversione avviene mentre digiti.
- 3
Leggi il layout dei bit codificato per colore
Il bit di segno, il campo esponente e la mantissa sono evidenziati in colori diversi, con la tabella di scomposizione dei campi che mostra i bit grezzi, l'aritmetica del bias e il bit iniziale implicito.
- 4
Controlla il valore memorizzato esatto e l'errore
Il pannello di precisione stampa il valore effettivamente memorizzato — ogni cifra, calcolata in modo esatto — accanto all'errore di arrotondamento rispetto a ciò che hai digitato, oltre ai valori rappresentabili precedente e successivo e al gap in ULP.
- 5
Inverti bit, incolla hex, copia i risultati
Clicca su qualsiasi bit per invertirlo, oppure incolla stringhe hex (3DCCCCCD) e binarie per decodificarle di nuovo in decimale. Copia l'hex, il binario, il valore esatto o un link condivisibile che riproduce l'esatto pattern di bit.
Errori Comuni in Virgola Mobile
Fidarsi del valore stampato invece di quello memorizzato
I linguaggi stampano i float arrotondati alla stringa più corta che sopravvive al round-trip, quindi 0.1 sembra pulito mentre il valore memorizzato non lo è. Giudica la precisione dall'espansione esatta, non da ciò che mostra print().
print(0.1) # 0.1 — sembra esatto, non lo è
0.1 memorizzato (FP64) = 0.1000000000000000055511151231257827021181583404541015625
Confrontare i float per uguaglianza esatta
0.1 + 0.2 atterra sul pattern di bit 0x3FD3333333333334 mentre il letterale 0.3 è 0x3FD3333333333333 — a un ULP di distanza, quindi == è falso anche se entrambi si stampano come valori vicini a 0.3.
if (0.1 + 0.2 === 0.3) { … } // non viene mai eseguito if (Math.abs(a - b) < 1e-9) { … } // tolleranza dimensionata sui tuoi dati Quantizzare in FP16 senza controllare l'intervallo
Il più grande valore finito di FP16 è 65504. Qualsiasi valore più grande diventa Infinity, e una volta che un Infinity entra in un calcolo si propaga. Controlla i tuoi massimi prima del cast verso il basso — oppure usa bfloat16, che conserva l'intervallo di FP32.
fp16(65520) → Infinity (0x7C00) — overflow silenzioso
bf16(65520) → finito (bfloat16 conserva 8 bit di esponente)
Testare NaN con l'uguaglianza
NaN è l'unico valore che non è uguale a sé stesso — è così per progettazione, in modo che un calcolo fallito non possa mascherarsi da numero reale. Usa il controllo isNaN del tuo linguaggio invece di ==, e ricorda che esistono milioni di pattern di bit NaN distinti.
if (x === NaN) { … } // sempre falso, anche quando x È NaN if (Number.isNaN(x)) { … } // il test corretto Cosa Puoi Fare con il Convertitore IEEE 754
- Debug di dati binari serializzati
- Incolla l'hex trovato in una cattura di rete, un buffer GPU, un dump di registri o un formato di file e decodificalo nel valore decimale esatto — o procedi nell'altro senso per scrivere fixture di test. Nota sull'ordine dei byte: l'hex mostrato è il pattern di bit big-endian; se il tuo dump è little-endian, inverti l'ordine dei byte prima di incollare.
- Capire la quantizzazione ML
- Verifica se i tuoi valori sopravvivono al tetto di 65504 di FP16, confronta cifra per cifra la perdita di precisione tra FP16 e bfloat16 e ispeziona l'intervallo subnormale dove i gradienti vanno in underflow.
- Spiegare un bug di virgola mobile
- Quando un collega chiede perché due numeri 'uguali' differiscono, invia un permalink che mostra entrambi i pattern di bit e i valori memorizzati esatti — la discussione si risolve da sola. Abbinalo allo strumento di confronto testi per dump più lunghi.
- Imparare o insegnare la codifica
- I corsi di architettura dei calcolatori diventano concreti quando gli studenti possono cliccare sui bit dell'esponente e osservare l'aritmetica del bias aggiornarsi. La tabella di scomposizione dei campi rispecchia il modo in cui i libri di testo disegnano il formato.
- Decodificare registri embedded e industriali
- I payload Modbus, CAN e dei sensori trasportano abitualmente valori FP32 come word esadecimali grezze. Incolla qui la word per leggere il valore fisico senza scrivere uno script usa e getta.
Formati IEEE 754 e Valori Speciali
- I quattro formati binari a colpo d'occhio
- binary16 (FP16): 1 bit di segno + 5 di esponente + 10 di mantissa, bias 15, massimo 65504, ~3.3 cifre decimali. bfloat16: 1 + 8 + 7, bias 127, massimo ≈ 3.39 × 10³⁸, ~2.3 cifre. binary32 (FP32): 1 + 8 + 23, bias 127, massimo ≈ 3.40 × 10³⁸, ~7.2 cifre. binary64 (FP64): 1 + 11 + 52, bias 1023, massimo ≈ 1.80 × 10³⁰⁸, ~15.9 cifre. Lo schema: i bit di esponente comprano intervallo, i bit di mantissa comprano precisione, e bfloat16 scambia deliberatamente tutta la sua precisione per l'intervallo di FP32.
- Come viene assemblato un valore
- Un numero normale si decodifica come (−1)^segno × 1.mantissa × 2^(esponente − bias). L'1 iniziale è implicito — non viene memorizzato, ed è per questo che un campo mantissa a 23 bit fornisce 24 bit di precisione. L'esponente memorizzato è l'esponente vero più il bias (127 in FP32), quindi 2⁰ è memorizzato come 01111111. La tabella di scomposizione dei campi in questo strumento mostra ogni passaggio di quell'aritmetica per il valore corrente.
- Valori speciali: i pattern di esponente riservati
- Esponente tutto a uno con mantissa zero è ±Infinity; con qualsiasi mantissa diversa da zero è NaN (il NaN quiet canonico imposta il bit più alto della mantissa). Esponente tutto a zero con mantissa zero è ±0; con mantissa diversa da zero è un subnormale, decodificato come 0.mantissa × 2^(1 − bias) — senza 1 iniziale implicito. Queste regole sono identiche in tutti e quattro i formati, ed è per questo che gli stessi chip funzionano in ciascuno.
- Arrotondamento: al più vicino, pareggi al pari
- Quando un valore cade tra due numeri rappresentabili, la modalità predefinita di IEEE 754 arrotonda al più vicino; in caso di pareggio esatto sceglie quello il cui ultimo bit di mantissa è 0 (pareggi al pari), il che previene derive sistematiche. Questo convertitore applica esattamente quella regola quando restringe il tuo input decimale nel formato di destinazione, e il pannello dell'errore mostra esattamente la differenza con segno risultante.
- ULP: il passo della griglia dei float
- I float rappresentabili non sono distribuiti in modo uniforme — il gap tra vicini (una unità nell'ultima posizione) raddoppia a ogni potenza di due. Vicino a 1.0 l'ULP di un double è 2⁻⁵² ≈ 2.22 × 10⁻¹⁶; vicino a 2⁵³ l'ULP raggiunge 1.0 e gli interi iniziano a saltare. Il pannello dei vicini stampa l'ULP corrente in modo esatto, che è la risposta onesta a 'quanto è preciso il mio numero qui?'.
Best Practice per la Virgola Mobile
- Non confrontare mai i float con ==
- Dopo qualsiasi operazione aritmetica, due espressioni matematicamente uguali possono trovarsi a un ULP di distanza. Confronta rispetto a una tolleranza adeguata alle tue grandezze — oppure conta gli ULP tra i pattern di bit, che questo strumento ti permette di ispezionare direttamente.
- Tieni il denaro fuori dai float binari
- Nessuna griglia in potenze di due contiene 0.10 esattamente, quindi la valuta nei float accumula errori visibili. Usa centesimi interi o un tipo decimale; il pannello del valore memorizzato esatto qui è la prova permanente del perché.
- Scegli il formato a 16 bit in base all'intervallo, non all'abitudine
- Se i tuoi valori possono superare 65504 — loss, gradienti, picchi nelle simulazioni fisiche — FP16 andrà in overflow a Infinity dove bfloat16 prosegue tranquillo. Se tutto è normalizzato in una banda stretta, i bit di mantissa extra di FP16 danno una precisione visibilmente migliore.
- Attenzione alla trappola del doppio arrotondamento quando restringi
- Convertire decimale → double → half può atterrare a un ULP di distanza dal convertire decimale → half direttamente, in rari casi a metà strada. Questo strumento arrotonda il tuo input decimale nel formato di destinazione in un solo passaggio, quindi ciò che vedi è la risposta IEEE 754 onesta.
- Aspettati che gli interi si rompano oltre 2⁵³
- Un double memorizza esattamente ogni intero fino a 2⁵³, poi inizia a saltare — 2⁵³ + 1 non è rappresentabile. Se gestisci ID o contatori vicino a quella scala, usa interi a 64 bit o stringhe, e controlla qui i valori sospetti a livello di bit.
Domande Frequenti sul Convertitore IEEE 754
Perché 0.1 + 0.2 non è uguale a 0.3?
Cos'è IEEE 754?
Qual è la differenza tra FP16 e bfloat16?
Cosa sono i numeri subnormali (denormali)?
Dovrei usare float o double?
Come converto manualmente un float in hex?
I miei dati vengono caricati quando uso questo convertitore?
Strumenti correlati
Vedi tutti gli strumenti →Convertitore di Basi Numeriche — Bin, Hex, Ott, Dec
Strumenti di conversione
Converti istantaneamente tra binario, esadecimale, decimale, ottale e qualsiasi base (2-36). Strumento online gratuito e privato: tutta l'elaborazione avviene nel tuo browser.
Convertitore di colori — HEX, RGB, HSL e OKLCH
Strumenti di conversione
Converte HEX in RGB, HSL, OKLCH, OKLAB e CMYK direttamente nel browser — basta un clic per copiare qualsiasi formato. Gratuito, senza registrazione, i colori non lasciano mai la pagina.
Convertitore HEX in CMYK
Strumenti di conversione
Converte colori HEX in CMYK direttamente nel browser. Approssimazione ingenua basata su sRGB per proof di stampa. Gratuito, online, senza registrazione, i colori non lasciano mai la pagina.
Convertitore HEX in HSL
Strumenti di conversione
Converte qualsiasi colore hex in HSL direttamente nel browser — supporta hex a 3, 6 e 8 cifre con alpha. Gratuito, istantaneo, online, senza registrazione, i colori non lasciano mai la pagina.
Convertitore HEX in OKLCH
Strumenti di conversione
Converte HEX in OKLCH per i design token di Tailwind v4. Output live percettivamente uniforme con avvisi di gamma Display P3. Gratis, solo browser.
Convertitore HEX in RGB
Strumenti di conversione
Converte qualsiasi codice colore hex in RGB direttamente nel browser — supporta hex a 3, 6 e 8 cifre con alpha. Gratuito, istantaneo, online, senza registrazione, i colori non lasciano mai la pagina.