Ввиду неточности с плавающей запятой это уравнение гарантируется, что оно истинно для любого произвольного числового значения a
, для которого операция деления a/a
возвращает числовое значение?
Math.floor(a / a) == 1
IEEE 754 определяет результат операции - это точный математический результат, округленный до ближайшего представляемого значения (в направлении, которое пользователь может указать, ближайший и т.д.). Когда точный математический результат представляется, он является ближайшим значением, и округления нет, поэтому результат является точным. Следовательно, a/a
равно 1 всякий раз, когда исключение не возникает.
Если я правильно помню, JavaScript не позволяет реализациям использовать избыточную точность (как, например, C). Таким образом, a/a
оценивается как ожидалось. Тогда Math.floor(a/a)
равен 1, а Math.floor(a/a) == 1
истинно.
a
равно +/- 0, +/- Inf или NaN.
Попробуем попробовать
test(1);
test(0);
test(1E10000000000000000000)
function test(a) {
console.log(a, Math.floor(a/a));
}
Ответ: Нет
Math.floor(Number.POSITIVE_INFINITY/Number.POSITIVE_INFINITY)
равенNaN
(то же самое дляNumber.NEGATIVE_INFINITY
)