Comprender los problemas de coma flotante
¿Podría alguien ayudarme a entender cómo determinar cuándo las limitaciones de coma flotante causarán errores en sus cálculos? Por ejemplo el siguiente código.
CalculateTotalTax = function (TaxRate, TaxFreePrice) {
return ((parseFloat(TaxFreePrice) / 100) * parseFloat(TaxRate)).toFixed(4);
};
No he podido ingresar dos valores que me hayan causado un resultado incorrecto para este método. Si elimino el toFixed (4), de hecho puedo ver dónde los cálculos comienzan a perder precisión (en algún lugar alrededor del sexto lugar decimal). Dicho esto, sin embargo, mi comprensión de los flotadores es que incluso los números pequeños a veces pueden no ser representados o no he entendido bien y los 4 decimales (por ejemplo) siempre se pueden representar con precisión.
MSDN explica los flotadores comotal...
Esto significa que no pueden tener una representación exacta de cualquier cantidad que no sea una fracción binaria (de la forma k / (2 ^ n) donde k y n son enteros)
Ahora supongo que esto se aplica a todos los flotantes (incluidos los utilizados en JavaScript).
Básicamente mi pregunta se reduce a esto. ¿Cómo se puede determinar si algún método específico será vulnerable a errores en las operaciones de coma flotante, con qué precisión se materializarán esos errores y qué entradas serán necesarias para producir esos errores?
Espero que lo que pregunte tenga sentido.