JavaScript. Каким образом он так вычисляет??

Кирилл Тряпичников
  · 1,2 K
Веб-разработчик, любитель истории, космоса и всего, что связано с наукой.

Смотря что вы имеете в виду под "так". Если вы про вычисления чисел с плавающей точкой, то это проблема не только JS, но и почти любого языка программирования.

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

Во многих языках программирования есть такое понятие, как машинный ноль или epsilon - некое значение, где отличие чисел считается несущественным и числа считаются равными. То есть сравнение происходит так Math.abs(a - b) < 0.00000001.

Очень простое объяснение, почему так происходит есть в руководстве по плавающим точкам. (eng)

Более сложное на хабре.

Комментировать ответ…
Вы знаете ответ на этот вопрос?
Поделитесь своим опытом и знаниями
Войти и ответить на вопрос
Присоединяйтесь к экспертному сообществу!

Яндекс.Кью — это сервис экспертных ответов на вопросы. Мы объединяем людей, которые хотят делиться знаниями, помогать друг другу и менять мир к лучшему.

Вы тоже можете стать экспертом!

Узнать больше