Tipos exactos
Aunque los números de punto flotante binarios son mejores para que los ordenadores trabajen con ellos, y lo bastante buenos para los humanos, a veces simplemente no son apropiados. En ocasiones los números de verdad tienen que sumarse bien hasta el último bit, y no hay excusas técnicas aceptables ─ normalmente cuando los cálculos involucran dinero.
Desgraciadamente, no hay un estándar dominante equivalente al IEEE 754 para esto (la versión del 2008 añadió tipos decimales, pero es demasiado reciente para tener una adopción generalizada).
Cada lenguaje o plataforma tiene su propia solución, y a veces más de una. Para más detalles, puedes ver las cheat sheets de los lenguajes.
Hay al menos tres clases diferentes de estos tipos de datos:
Decimal de precisión limitada
Básicamente lo mismo que el punto flotante binario del IEEE 754, excepto porque el exponente se interpreta en base 10. Como resultado, no hay errores de redondeo inesperados. Además, este tipo de formato es relativamente compacto y rápido, pero normalmente más lento que los formatos binarios.
Decimal de precisión arbitraria
A veces llamado «bignum», es similar a un tipo de precisión limitada, pero tiene la habilidad de incrementar la longitud de la mantisa (a veces también la del exponente) cuando es necesario. La contrapartida es que hay un coste (en memoria y velocidad) por soportar esta flexibilidad, y además cuanto más larga es la mantisa más memoria se necesita y más lentos se vuelven los cálculos.
Puede ser muy tentador decir «mi operación es importante, así que necesito toda la precisión que sea posible», pero en la práctica la importancia real de la precisión en la diezmilésima cifra decimal se desvanece en comparación con la penalización en la eficiencia requerida para soportarlo.
Cálculo simbólico
El «santo grial» de las operaciones exactas. Se consigue escribiendo un programa que realmente conozca todas las reglas matemáticas y represente los datos como símbolos en lugar de números redondeados e imprecisos. Por ejemplo:
- 1/3 es realmente la fracción «uno dividido entre tres».
- La raíz cuadrada de 2 es realmente el número que, multiplicado por sí mismo, da exactamente 2.
- Incluso los números trascendentes como e y π son conocidos, junto con sus propiedades, de tal forma que eiπ es exactamente igual a -1.
Sin embargo, estos sistemas de cálculo simbólico son complejos, lentos y requieren unos conocimientos matemáticos significativos para ser usados. Son herramientas inestimables para los matemáticos, pero no son apropiadas para las tareas diarias en programación. E incluso la mayoría de los matemáticas trabajan en problemas donde soluciones numéricas imprecisas son mejores porque no se conoce solución en forma cerrada.
© Publicado en http://puntoflotante.org/ bajo una licencia Creative Commons Atribución Unported (BY). Original en inglés por Michael Borgwardt en http://floating-point-gui.de/.