Javascript не умеет считать.

Javascript плохо работает с математикой, и это нормально.

Если честно, особо и не обвинишь, основная проблема присуща всем компьютерным системам.

Подумайте об этом так: Сколько битов требуется компьютерной программе для представления числа? Это зависит (Javascript использует 64), но суть проблемы заключается в следующем: конечные или бесконечные биты? Итак, сколько цифр может иметь число? Ответ — не ограничен.

Поэтому в какой-то момент компьютер столкнется с проблемой представления бесконечного количества чисел в конечном пространстве.

Проблема не в том, что трудно наткнуться:

var x = 0,1;
var y = 0,2;
var z = x + y;
console.log(z)

0.30000000000000004

Что такое з? Если вы скажете 0,3, Javascript захочет с вами поговорить. Попробуй здесь

Десятичные дроби представляют собой дроби. Обычно мы используем основание 10. Например, 0,5 — это представление 1/2. 0,5 — конечное представление 1/2. Мы знаем, что это совершенно верно, после «5» больше не ожидается появления чисел. Однако посмотрите на десятичное представление 1/3 — мы представляем его как десятичное число с основанием 10, равное 0,3333, и в конце концов просто прекращаем писать. Мы знаем, что оставляем это как незавершенную работу, но общество соглашается, что мы можем просто бросить ее в какой-то момент.

Число, о котором идет речь, может быть очень большим или очень маленьким числом — важным вопросом является количество задействованных цифр. В какой-то момент даже самый лучший компьютер вскидывает свои цифровые руки в воздух, вежливо кашляет и закругляется, полагая, что вы вряд ли заметите. И правда в том, что для большинства приложений, кроме самой математики, вы вряд ли это заметите. (Даже НАСА использует только 16 цифр Пи при расчете межпланетных путешествий. С помощью 39–40 цифр вы можете рассчитать диаметр видимой Вселенной до диаметра атома водорода.)

«Сжатие бесконечного множества действительных чисел в конечное число битов требует приблизительного представления… При любом фиксированном числе битов большинство вычислений с действительными числами будут давать величины, которые невозможно точно представить, используя такое количество битов. Поэтому результат вычисления с плавающей запятой часто должен быть округлен, чтобы вернуться к его конечному представлению. Эта ошибка округления является характерной чертой вычислений с плавающей запятой».¹

Ошибки округления в симуляциях и математических задачах.

Непредвиденные ответы в компьютерных программах.

Способы, которыми ошибки с плавающей запятой могут повлиять на поведение компьютерной системы:

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

Итак, TLDR: компьютеры — это осязаемые, конечные коробки, которые теоретически должны хранить и обрабатывать числа, которые могут быть бесконечно длинными. К

Источники:

1) Что должен знать каждый ученый-компьютерщик об арифметике с плавающей запятой Дэвида Голдберга, опубликовано в мартовском выпуске журнала Computing Surveys за 1991 год. Copyright 1991, Association for Computing Machinery, Inc.»

2) https://www.w3schools.com/js/tryit.asp?filename=tryjs_numbers_infinity

3)Представление чисел в компьютере.pdf

4) Хорошая общая статья для общего ознакомления