Data study
Abbiamo fatto un andata-ritorno di 306 conversioni di unità un milione di volte. Ecco la precisione che effettivamente perdi.
Andata-ritorno ogni conversione un milione di volte. L'88,2% di coppie va alla deriva di esattamente zero; il caso peggiore perde precisione nella 15ª cifra significativa. Ecco perché — e quali categorie sono perfettamente stabili.
By Buğra SözeriPublished
Ogni conversione di unità sul web viene eseguita su IEEE 754 floating point a doppia precisione — lo stesso formato numerico a 64 bit che JavaScript, i fogli di calcolo e la maggior parte dei calcolatori utilizzano. È accurato a circa 15-16 cifre significative, ma non è infinitamente preciso: la maggior parte delle frazioni decimali non può essere memorizzata esattamente in binario. Questo solleva una domanda naturale. Se converti un numero da un'unità a un'altra e indietro, ottieni il numero originale? E se lo fai di nuovo, e di nuovo — l'errore si accumula?
L'abbiamo testato in modo esaustivo. Per tutti gli 306 abbinamenti di conversione principali nel catalogo di Convertitive (ogni categoria eccetto la temperatura, che è una conversione affine piuttosto che un puro rapporto), abbiamo iniziato al valore 1, convertito avanti e indietro, e ripetuto quel ciclo di andata-ritorno un milione di volte. Quindi abbiamo misurato di quanto il risultato era andato alla deriva da 1.
Scoperta 1: l'88% delle conversioni non va mai alla deriva
Delle 306 coppie, 270 (88,2%) sono tornate esattamente a 1 dopo un milione di andate-ritorno — bit-per-bit identico, nessun errore. Questi sono gli abbinamenti il cui rapporto da unità a unità è esattamente rappresentabile nel floating point binario, quindi ogni conversione è perfettamente reversibile non importa quante volte la ripeti.
Questo è un risultato più forte di quello che la maggior parte delle persone si aspetta. L'intuizione che “l'errore floating-point si accumula sempre” è semplicemente falsa per la maggior parte delle conversioni reali.
Scoperta 2: anche il caso peggiore rimane accurato a 15 cifre
Le 36 coppie rimanenti hanno avuto una deriva — ma quasi nulla. Ecco i peggiori trasgressori dopo un milione completo di andate-ritorno:
| Coppia di conversione | Categoria | Deriva assoluta dopo 1.000.000 andate-ritorno |
|---|---|---|
| miglia → pollici | lunghezza | 1,78 × 10⁻¹⁵ |
| kPa → mmHg | pressione | 1,11 × 10⁻¹⁵ |
| anni → secondi | tempo | 9,99 × 10⁻¹⁶ |
| once → tonnellate | peso | 8,88 × 10⁻¹⁶ |
| libbre → tonnellate | peso | 8,88 × 10⁻¹⁶ |
| nodi → km/h | velocità | 7,77 × 10⁻¹⁶ |
| bar → psi | pressione | 6,66 × 10⁻¹⁶ |
| kWh → joule | energia | 4,44 × 10⁻¹⁶ |
La coppia singola peggiore, miglia → pollici, è andata alla deriva di 1,78 × 10⁻¹⁵ — all'incirca due parti per quadrilione, dopo unmilione di andate-ritorno. Un utente normale esegue esattamente una conversione, dove l'errore è milioni di volte più piccolo ancora e si trova ben al di sotto della 15ª cifra significativa. In termini pratici, il risultato è esatto.
Scoperta 3: quali categorie sono perfettamente stabili
La deriva si raggruppa per categoria e lo schema è spiegato interamente da come le definizioni di unità si fattorizzano in binario:
| Categoria | Coppie testate | Coppie a zero drift | Peggiore drift |
|---|---|---|---|
| dati (byte, bit) | 30 | 30 (100%) | 0 |
| volume | 56 | 56 (100%) | 0 |
| energia | 30 | 28 (93%) | 4,44 × 10⁻¹⁶ |
| tempo | 30 | 28 (93%) | 9,99 × 10⁻¹⁶ |
| peso | 30 | 26 (87%) | 8,88 × 10⁻¹⁶ |
| lunghezza | 56 | 48 (86%) | 1,78 × 10⁻¹⁵ |
| coppia | 20 | 16 (80%) | 4,44 × 10⁻¹⁶ |
| pressione | 30 | 22 (73%) | 1,11 × 10⁻¹⁵ |
| potenza | 12 | 8 (67%) | 2,22 × 10⁻¹⁶ |
| velocità | 12 | 8 (67%) | 7,77 × 10⁻¹⁶ |
Dati e volume sono perfettamente stabili — ogni coppia fa un andata-ritorno senza perdite. Le unità di dati sono poteri di due e dieci che il binario gestisce facilmente; le unità di volume in questo catalogo condividono fattori che si annullano esattamente. Le categorie con la maggior parte della deriva — potenza e velocità — sono dominate da definizioni come cavalli vapore e nodi che tirano in fattori irrazionali in binario.
Perché questo accade
La mantissa di archiviazione floating point a doppia precisione è a 53 bit, dando un epsilon di macchina di circa 2,2 × 10⁻¹⁶ — il più piccolo gap relativo tra i numeri rappresentabili vicino a 1. Una conversione moltiplica per un rapporto di due fattori di unità. Quando quel rapporto è una frazione binaria esatta (o i fattori avanti e indietro si annullano esattamente), il ciclo di andata-ritorno è senza perdite e la deriva è zero per sempre. Quando il rapporto non è esattamente rappresentabile — come con l'0,0254 m del pollice o l'1609,344 m del miglio — ogni conversione viene arrotondata al valore rappresentabile più vicino, lasciando un errore dell'ordine di uno epsilon. Nel corso di un milione di andate-ritorno questi errori fanno una passeggiata casuale lenta, motivo per cui anche il caso peggiore raggiunge solo poche volte 10⁻¹⁵.
Il da asporto pratico
La conversione di unità nel browser è, a tutti gli effetti, esatta. L'errore è limitato dall'epsilon della macchina, non si accumula in modo significativo nell'uso normale ed è sempre ben al di sotto della precisione che visualizzeresti mai. Se ti sei mai chiesto se il concatenamento di conversioni attraverso uno strumento corrompe silenziosamente i tuoi numeri — non lo fa. Per il quadro completo di come i risultati di Convertitive si confrontano con i valori di riferimento autorevoli, vedi lo studio di accuratezza del convertitore e la metodologia di conversione.
Metodologia
Per ogni coppia ordinata di unità principali (A, B) all'interno di una categoria, abbiamo calcolato v ← v × (factorA / factorB) poi v ← v × (factorB / factorA), iniziando da v = 1, ripetuto 1.000.000 di volte e registrato |v − 1|. I fattori sono i valori esatti factorToBase dai dati di unità di Convertitive, derivati da NIST SP 811. Tutta l'aritmetica è IEEE 754 binary64 (tipo numerico nativo di JavaScript). La temperatura è stata esclusa perché è una conversione affine (ha un offset additivo), non un puro rapporto, quindi il modello di andata-ritorno sopra non si applica. La procedura è deterministica: gli stessi input producono sempre gli stessi valori di deriva segnalati qui.
Frequently asked questions
- Cos'è la deriva di conversione?
- La deriva è il piccolo errore che si accumula quando converti un valore da un'unità a un'altra e indietro più volte. In aritmetica esatta, convertendo 1 metro in piedi e indietro restituisce esattamente 1. In IEEE 754 double-precision floating point — che ogni browser e foglio di calcolo utilizza — i valori intermedi vengono arrotondati a 53 bit, quindi l'andata-ritorno può atterrare leggermente lontano da dove è iniziato.
- Devo preoccuparmi dell'errore floating-point nelle conversioni di unità?
- Per qualsiasi uso realistico, no. Dopo un milione di andate-ritorno, la coppia peggiore che abbiamo misurato (miglia a pollici) è andata alla deriva di 1,78 × 10⁻¹⁵ — circa due parti per quadrilione. Una singola conversione nel mondo reale va alla deriva molto meno di quello, e l'errore è molti ordini di grandezza al di sotto di qualsiasi precisione di visualizzazione che useresti mai. La matematica è effettivamente esatta a fini pratici.
- Perché alcune conversioni non hanno deriva?
- Quando il rapporto tra due unità è esattamente rappresentabile in floating point binario, l'andata-ritorno è senza perdite. I poteri di dieci che si risolvono in frazioni binarie pulite e le definizioni di unità che condividono fattori producono rapporti che l'hardware può memorizzare esattamente. 270 delle 306 coppie che abbiamo testato (88,2%) rientrano in questa categoria e non hanno mostrato deriva nemmeno dopo un milione di andate-ritorno.
- Quali conversioni vanno alla deriva di più?
- Coppie da metrica a imperiale i cui fattori di definizione non sono esatte frazioni binarie — miglia a pollici, kPa a mmHg, nodi a km/h, chilowatt-ore a joule. Questi si basano su fattori come 1609,344 m per miglio o 0,0254 m per pollice, che non possono essere memorizzati esattamente in binario, quindi ogni conversione introduce un piccolo errore di arrotondamento.
- Come è stato misurato?
- Per ogni coppia di unità principali, abbiamo iniziato con il valore 1, convertito A→B poi B→A, e ripetuto quel ciclo 1.000.000 di volte utilizzando i fattori esatti dai dati di unità di Convertitive e l'aritmetica a doppia precisione standard. Abbiamo quindi misurato la differenza assoluta dal valore iniziale di 1. La temperatura è stata esclusa perché è una conversione affine (con offset), non un puro rapporto. Il calcolo è deterministico e riproducibile.
- Questo significa che Convertitive arrotonda le mie risposte?
- Convertitive calcola con la piena doppia precisione e arrotonda solo per la visualizzazione. La deriva studiata qui è intrinseca all'aritmetica floating-point stessa, non all'arrotondamento che Convertitive aggiunge — ed è molto più piccola dell'arrotondamento di visualizzazione, quindi non la vedi mai.
Sources & references
Authoritative references cited by this piece. Verified by Buğra Sözeri on the dates shown and re-checked at every deploy.
- IEEE 754-2019 — Standard per l'aritmetica in virgola mobile — Definisce il formato a doppia precisione (binary64) la cui mantissa a 53 bit imposta l'epsilon della macchina di ~2,2 × 10⁻¹⁶ che limita la deriva misurata qui(as of )
- Specifica del linguaggio ECMAScript — Tipo Number — Number di JavaScript è IEEE 754 binary64; il calcolo dell'andata-ritorno viene eseguito esattamente in questa aritmetica(as of )
- NIST SP 811 — Guida per l'uso del Sistema internazionale di unità — Fonte autorevole per i fattori di conversione esatti metrica-imperiale (ad es. 1 in = 0,0254 m) utilizzati come definizioni di coppia(as of )
- Dati di unità e metodologia di Convertitive — I valori factorToBase che guidano ogni coppia in questo studio; lo studio è riproducibile da questi dati(as of )
Related
Published June 27, 2026