GuíasPor qué fallan los convertidores de punto flotante (y cómo lo solucionan las matemáticas decimales)
Por qué fallan los convertidores de punto flotante (y cómo lo solucionan las matemáticas decimales)
Comprenda por qué el punto flotante binario crea residuos de conversión extraños, cuándo esos errores son importantes y cómo la aritmética decimal o racional hace que los convertidores de unidades sean confiables.
El clásico problema 0,1 + 0,2 se encuentra con las unidades
La mayoría de las CPU almacenan números no enteros en punto flotante binario (IEEE 754). Las fracciones que parecen simples en decimal (0,1, 0,001, 2,54) a menudo no se pueden representar exactamente en binario. El valor almacenado es la aproximación representable más cercana, y la aritmética sobre aproximaciones acumula pequeños residuos.
La conversión de unidades multiplica y divide esos valores repetidamente. Convierta pulgadas a milímetros y viceversa, o litros a metros cúbicos y viceversa, y es posible que vea 2,9999999997 en lugar de 3. El factor de conversión física fue exacto; la representación por computadora no lo era.
En muchas visualizaciones, la diferencia es invisible después del redondeo. Para la dosificación adyacente a las finanzas, las trayectorias de herramientas CNC, el área de terreno legal o las afirmaciones de pruebas automatizadas que esperan una igualdad exacta, esos residuos se convierten en verdaderos errores.
¿Qué factores de conversión son exactos en papel?
La pulgada internacional es exactamente de 25,4 mm. El pie internacional es exactamente 0,3048 m. El litro equivale exactamente a 0,001 m³. Un centímetro cúbico equivale exactamente a 1 ml en el sentido habitual de laboratorio (1 cm³ = 10⁻⁶ m³). Estas son definiciones, no medidas.
Si el software almacena 25.4 como flotante binario, es posible que ya esté ligeramente incorrecto antes de que se ejecute cualquier conversión. Multiplicar por otro factor inexacto agrava el error. Las pruebas de ida y vuelta que afirman una igualdad estricta fallan incluso cuando el algoritmo es conceptualmente correcto.
La temperatura agrega compensaciones: Celsius ↔ Kelvin usa 273,15. Esa constante es también un valor decimal que los flotadores binarios solo aproximan. Las conversiones afines son especialmente sensibles porque la adición de un desplazamiento inexacto cambia todos los resultados.
Dónde aparecen los errores de punto flotante en la práctica
Los convertidores de UI a menudo ocultan el problema redondeando a un número fijo de decimales. Los usuarios ven resultados limpios y nunca notan el ruido interno. Los problemas aparecen cuando otro sistema consume el flotante sin procesar: un kernel CAD, una exportación CSV o una prueba unitaria que compara cadenas de precisión total.
Las conversiones encadenadas amplifican los problemas. Ir milla → yarda → pie → pulgada → milímetro → metro con flotadores binarios en cada paso es peor que una sola conversión de milla → metro con un factor de alta precisión. Cada salto redondea el valor intermedio.
Las cantidades al cuadrado y al cubo empeoran los errores. El área y el volumen multiplican las escalas de longitud, por lo que un pequeño error relativo en la longitud se vuelve dos o tres veces mayor en términos relativos para el área o el volumen cuando se expande (1+ε)ⁿ.
Alternativas decimales, racionales y de punto fijo
Las bibliotecas decimales (por ejemplo, decimal.js, Big.js o decimales nativos del lenguaje) almacenan números en base 10. Los factores decimales exactos como 0,3048 y 0,001 se mantienen exactos dentro de la precisión elegida. Los convertidores de unidades que se preocupan por la corrección a menudo convierten a través de una unidad base decimal.
La aritmética racional almacena factores como fracciones de números enteros. Si 1 pulgada = 127/5000 metros exactamente (porque 25,4 mm = 127/5000 m), la multiplicación se puede cancelar exactamente. Los racionales son ideales para conversiones de escala pura; Las compensaciones aún necesitan un manejo cuidadoso en cuanto a la temperatura.
Las matemáticas de punto fijo escalan todo a un número entero del tic más pequeño: nanómetros, microlitros o milésimas de pulgada. La aritmética de enteros es exacta hasta que se desborda. Funciona bien para dominios con una cantidad de medición clara.
Reglas prácticas para convertidores confiables
Almacene factores legales exactos como decimales o racionales, no como flotantes binarios escritos apresuradamente. Convierta entrada → base → salida en el menor número de pasos posible. Redondee solo al formatear para humanos y documente el modo de redondeo.
Nunca pruebe convertidores con igualdad estricta en flotantes binarios. Compare dentro de una tolerancia absoluta o relativa, o compare formas de cadenas decimales con una precisión establecida. Prefiera las pruebas doradas que utilizan pares exactos conocidos, como 1 pulgada = 25,4 mm.
Si crea una interfaz de usuario de calculadora, muestre suficiente precisión para que sea útil, pero no tantos dígitos como para que el ruido flotante parezca una señal. Una herramienta de longitud que muestra doce decimales después de convertir mediante flotantes anuncia su error de representación.
Cuando los flotadores binarios todavía están bien
Las comparaciones aproximadas, los juegos, la visualización de datos y muchas simulaciones científicas toleran el error de flotación porque la incertidumbre del modelo eclipsa el error de representación. La clave es conocer tu tolerancia. Si un milímetro importa, los flotadores necesitan disciplina o reemplazo.
La aceleración de hardware y las canalizaciones de GPU a menudo fuerzan la flotación. En esos casos, mantenga la conversión autorizada en decimal en la CPU o el servidor y trate los flotantes de la GPU como una visualización o una aproximación intermedia.
La buena ingeniería es hacer coincidir la representación numérica con la decisión que tomarás con el número. La conversión de unidades para manufactura, medicina y metrología legal merece matemáticas decimales o racionales; un widget meteorológico que convierte las temperaturas de la ciudad no lo hace. En caso de duda, elija la representación más estricta: el costo de rendimiento de los decimales suele ser menor que el costo de un error silencioso de ida y vuelta.
Convertidores relacionados
Preguntas frecuentes
¿Por qué la conversión de ida y vuelta cambia mi número?
El punto flotante binario no puede representar muchos factores decimales exactamente. Cada multiplicación o división añade un pequeño error de redondeo. La conversión de ida y vuelta mediante flotadores a menudo no logra restaurar los bits originales incluso cuando los factores de conversión son conceptualmente exactos.
¿Es suficiente la doble precisión para la conversión de unidades?
La precisión doble (float64) es suficiente para muchas conversiones cotidianas después del redondeo de visualización, pero no sustituye a los factores decimales exactos cuando se necesitan viajes de ida y vuelta con bits estables, metrología legal o pruebas automatizadas estrictas. Prefiera decimales o racionales para convertidores autorizados.
¿Cómo debo comparar los resultados del convertidor en las pruebas?
Compare con una precisión declarada, utilice igualdad de cadenas decimales o afirme tolerancias absolutas y relativas. Evite esperar una igualdad binaria exacta después de varios pasos aritméticos.