Podría alguien aquí, por favor ayúdeme a comprender cómo determinar cuándo las limitaciones de punto flotante causarán errores en sus cálculos. Por ejemplo, el siguiente código.Comprensión de los problemas de punto flotante
CalculateTotalTax = function (TaxRate, TaxFreePrice) {
return ((parseFloat(TaxFreePrice)/100) * parseFloat(TaxRate)).toFixed(4);
};
No he podido ingresar dos valores que hayan causado un resultado incorrecto para este método. Si elimino el toFixed (4) puedo ver de hecho dónde comienzan a perder precisión los cálculos (alrededor del sexto lugar decimal). Habiendo dicho eso, mi comprensión de las carrozas es que incluso los números pequeños a veces no pueden ser representados o he malentendido y pueden representarse con precisión 4 lugares decimales (por ejemplo).
MSDN explica flotadores como such ...
Esto significa que no pueden mantener una representación exacta de cualquier cantidad que es no una fracción binaria (de la forma k/ (2^n), donde k y n son números enteros)
Ahora supongo que esto se aplica a todas las carrozas (incluidas las utilizadas en javascript).
Fundamentalmente mi pregunta se reduce a esto. ¿Cómo se puede determinar si algún método específico será vulnerable a los errores en operaciones de punto flotante, con qué precisión se materializarán esos errores y qué entradas se necesitarán para producir esos errores?
Espero que lo que estoy pidiendo tenga sentido.
Quizás esto se relaciona con este tema: http://en.wikipedia.org/wiki/Machine_epsilon –
* Tony the Pony *, también conocido como [Jon Skeet] (http://stackoverflow.com/users/22656/jon-skeet), tiene una [excelente explicación] (http://codeblog.jonskeet.uk/2009/11/02/omg-ponies-aka-humanity-epic-fail/). Legible, claro, divertido sin ser irritante, y no tan pesado como [algunos enlaces] (http://docs.sun.com/source/806-3568/ncg_goldberg.html) que a menudo se publican sobre este tema. – MarkJ