Комментарии 4
Было интересно, странно что нет комментариев.
0
Автор говорит про стандарт IEEE 754 и показывает вычеслиные в формате double значения, различающиеся после 16 десятичных значащих цифр, а формат и не гарантирует, что дальше цифры будут иметь значение. Это не проблема JS, это особенность чисел с плавающей точкой, поэтому нужно задумыватся, как их сравнивать (в любом языке), особенно если нужна воспроизводимость.
+1
В первом примере довольно сильное отличие:
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 будет ок? Нет, спасибо.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Об изменчивых методах объекта Math в JavaScript