Как стать автором
Обновить

Комментарии 4

Было интересно, странно что нет комментариев.

Уже есть :)

Автор говорит про стандарт IEEE 754 и показывает вычеслиные в формате double значения, различающиеся после 16 десятичных значащих цифр, а формат и не гарантирует, что дальше цифры будут иметь значение. Это не проблема JS, это особенность чисел с плавающей точкой, поэтому нужно задумыватся, как их сравнивать (в любом языке), особенно если нужна воспроизводимость.

В первом примере довольно сильное отличие:


julia> bitstring(0.09966799462495590234)
"0011111110111001100000111101011101111001010111110100000101000000"

julia> bitstring(0.09966799462495581907)
"0011111110111001100000111101011101111001010111110100000100111010"

Во втором на единицу младшего разряда, это действительно в пределах погрешности


julia> bitstring(0.03703703703703703498)
"0011111110100010111101101000010010111101101000010010111101101000"

julia> bitstring(0.03703703703703702804)
"0011111110100010111101101000010010111101101000010010111101100111"

Но фразы


И тут проверяется не какой-то сверхсложный метод: функция gamma реализована с использованием стандартных функций JavaScript — Math.pow, Math.sqrt и Math.sin.
или
Если нужно выяснить, равны ли два числа — проверяется условие вида Math.abs(result — expected) < epsilon.
в любом случае показывают, что ни для каких серьёзных вычислений эта библиотека не годится.

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


А второе мне скажет, что при ожидаемой величине 10-9 результат 10-4 будет ок? Нет, спасибо.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий