Понимание проблем с плавающей запятой

Кто-нибудь может помочь мне понять, как определить, когда ограничения с плавающей запятой вызовут ошибки в ваших вычислениях. Например, следующий код.

CalculateTotalTax = function (TaxRate, TaxFreePrice) {
     return ((parseFloat(TaxFreePrice) / 100) * parseFloat(TaxRate)).toFixed(4);
};

Мне не удалось ввести какие-либо два значения, которые вызвали для меня неверный результат для этого метода. Если я удалю toFixed (4), я смогу увидеть, где вычисления начинают терять точность (где-то около шестого десятичного знака). Мое понимание чисел с плавающей запятой состоит в том, что иногда даже небольшие числа могут не быть представлены или я неправильно понял, и могу ли 4 десятичных знака (например) всегда быть представлены точно.

MSDN объясняет числа с плавающей запятой как , например ...

Это означает, что они не могут содержать точное представление любой величины, которая не двоичная дробь (вида k / (2 ^ n), где k и n - целые числа)

Теперь я предполагаю, что это применимо ко всем числам с плавающей запятой (включая те, которые используются в javascript).

По сути, мой вопрос сводится к этому. Как определить, будет ли какой-либо конкретный метод уязвимым для ошибок в операциях с плавающей запятой, с какой точностью эти ошибки материализуются и какие входные данные потребуются для их создания?

Надеюсь, то, что я спрашиваю, имеет смысл.

13
задан Maxim Gershkovich 12 January 2011 в 01:49
поделиться