Las íes bajo los puntos
Los ordenadores no lo saben todo. En particular, ni siquiera saben qué es exactamente el número 0.3, lo cual, para una máquina supuestamente ideada para el cómputo, parece un pecado bastante grave.
La culpa la tienen la representación binaria y la aritmética de punto flotante, cuyas limitaciones he podido recordar hoy mismo, cuando Amaya me sugería la imprecisión de JavaScript en cálculos tan aparentemente sencillos como estos:Naturalmente existen mecanismos para solventar este tipo de incordios numéricos en el plano de la utilidad práctica, pero resulta interesante no olvidar los problemas inherentes al hecho de tratar de representar un espacio infinito de números (los números reales) con una cantidad finita de bits.var a = 0.333 * 100; // Debería resultar 33.3
alert(a); // Pero da 33.300000000000004
var b = 0.119 * 100; // Debería resultar 11.9
alert(b); // Pero da 11.899999999999998
La representación en punto flotante implica transformaciones o mapeos de infinito-a-uno, lo que trae como consecuencias los siguientes problemas:- Errores de redondeo: la mayoría de los números reales no son representables exactamente en formatos binarios de punto flotante, lo que hace que números para nosotros tan sencillos como 0.1, 0.2, 0.3, 0.4, 0.6, 0.7, 0.8, y 0.9 sean inconcebibles (en sentido exacto) para nuestro ordenador.
- Imprecisiones en los cálculos: incluso cuando los operandos sean exactamente representables en punto flotante, el resultado de una operación probablemente no lo sea, por lo que se generarán errores de redondeo que además se pueden ir acarreando en sucesivas operaciones.
- Pérdida de propiedades básicas: como la asociatividad de la suma y el producto, o la propiedad distributiva de sumas y multiplicaciones. Por los problemas de precisión y redondeo mencionados, podemos encontrar ambigüedad en ciertas expresiones (como w = x + y + z, por ejemplo), al tratar de trasladarlas al espacio de punto flotante.
Uso mundial de distintos separadores decimales(coma, punto, momayyez o desconocido)