Поэтому, чтобы ответить на ваши три вопроса, любая операция с любой точностью потенциально уязвима. Будет ли данный вклад или нет, это вопрос, на который я не знаю, как ответить, но я догадываюсь, что есть ряд факторов. 1) Насколько близок фактический ответ к ближайшей двоичной дроби. 2) Точность в двигателе, выполняющем расчет. 3) Метод, используемый для выполнения расчета (например, умножение на сдвиг битов может дать результаты, отличные от умножения на повторное сложение)
кто-то здесь, пожалуйста, помогите мне понять, как определить, когда ограничения с плавающей запятой приведут к ошибкам в ваших расчетах. Например, следующий код.
CalculateTotalTax = function (TaxRate, TaxFreePrice) {
return ((parseFloat(TaxFreePrice) / 100) * parseFloat(TaxRate)).toFixed(4);
};
Мне не удалось ввести какие-либо два значения, которые вызвали для меня неправильный результат для этого метода. Если я уберу toFixed (4), я смогу увидеть, где вычисления начинают терять точность (где-то около 6-го знака после запятой). Сказав, что, хотя, я понимаю, что числа с плавающей запятой иногда могут быть не в состоянии быть представленными, или я неправильно понял, и может всегда быть точно представлены 4 десятичных знака (например).
MSDN объясняет плавания кактакие...
Это означает, что они не могут содержать точное представление любой величины, которая не является двоичной дробью (в форме k / (2 ^ n), где k и n являются целыми числами)
Теперь я предполагаю, что это относится ко всем числам с плавающей точкой (включая те, которые используются в javascript).
По сути, мой вопрос сводится к этому. Как можно определить, будет ли какой-либо конкретный метод уязвим к ошибкам в операциях с плавающей запятой, с какой точностью эти ошибки материализуются и какие входные данные потребуются для получения этих ошибок?
Надеюсь, то, что я спрашиваю, имеет смысл.