cannibal_corpse
@cannibal_corpse
Верстальщик руками

Почему вычисления происходят именно так?

Добрый день!
Увидел сегодня мем, где был следующий код:

7110 / 100 * 100 === 7110 //false
7120 / 100 * 100 === 7120 // true


Я пошел разбираться в консоли и выяснил, что первое выражение равняется 7109.(99)
А вот второе выражение отрабатывает корректно, согласно ожиданиям - 7120

Подскажите, отчего так происходит?
  • Вопрос задан
  • 1502 просмотра
Решения вопроса 2
Stalker_RED
@Stalker_RED
JS тут не при чем, это особенности вычислений с плавающей запятой, и они описаны в стандарте IEEE 754, и именно так работает большинство процессоров.
Если вы хотите чтобы работало "согласно ожиданиям", то есть варианты:
1. подкорректировать свои ожидания, и работать как все.
2. использовать библиотеки для всяких длинных арифметик и прочих повышенных точностей, платя за эту точность скоростью вычислений.
3. использовать языки, которые будут маскировать проблему, округляя числа втихаря (и рисковать нарваться на неточности уже из-за этих округлений, ага).

https://0.30000000000000004.com/ -- тут подробно, с примерами на разных языках.
Ответ написан
FloydReme
@FloydReme
Пишу музыку и программирую
Этот же пример разобран тут
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы