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

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

Math.floor(a / a) == 1

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Давайте попробуем

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

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

Ответ: Нет

0 голосов
/ 28 октября 2018

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

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

...