Гарантируется ли `Math.floor (a / a) == 1` для любого` a` такого, что `a / a` не является NaN?

1

Ввиду неточности с плавающей запятой это уравнение гарантируется, что оно истинно для любого произвольного числового значения a, для которого операция деления a/a возвращает числовое значение?

Math.floor(a / a) == 1
  • 0
    Вы пробовали это, когда 0?
  • 0
    Math.floor(Number.POSITIVE_INFINITY/Number.POSITIVE_INFINITY) равен NaN (то же самое для Number.NEGATIVE_INFINITY )
Показать ещё 11 комментариев
Теги:
floating-point
precision

2 ответа

4

IEEE 754 определяет результат операции - это точный математический результат, округленный до ближайшего представляемого значения (в направлении, которое пользователь может указать, ближайший и т.д.). Когда точный математический результат представляется, он является ближайшим значением, и округления нет, поэтому результат является точным. Следовательно, a/a равно 1 всякий раз, когда исключение не возникает.

Если я правильно помню, JavaScript не позволяет реализациям использовать избыточную точность (как, например, C). Таким образом, a/a оценивается как ожидалось. Тогда Math.floor(a/a) равен 1, а Math.floor(a/a) == 1 истинно.

  • 0
    И исключение произойдет только в том случае, если a равно +/- 0, +/- Inf или NaN.
1

Попробуем попробовать

test(1);
test(0);
test(1E10000000000000000000)

function test(a) {
  console.log(a, Math.floor(a/a));
}

Ответ: Нет

Ещё вопросы

Сообщество Overcoder
Наверх
Меню