Ответ 1
Я не эксперт по числам с плавающей запятой, но Wikipedia говорит, что удваивает 52 бит точности. Логически кажется, что 52 бит должно быть достаточно, чтобы надежно аппроксимировать целочисленное деление 32-битных целых чисел.
Разделение минимальных и максимальных 32-битных подписанных ints -2147483648 / 2147483647
создает -1.0000000004656613
, который по-прежнему является разумным количеством значимых цифр. То же самое относится к его обратному выражению 2147483647 / -2147483648
, который производит -0.9999999995343387
.
Исключение составляет деление на ноль, о котором я упоминал в комментарии. Поскольку связанный запрос SO указывает, что целочисленное деление на ноль обычно вызывает какую-то ошибку, тогда как приведение в плавающей запятой приводит к (1 / 0) | 0 == 0
.
Обновление: В соответствии с другим SO-ответом целочисленное деление в C усекается к нулю, что и есть |0
в JavaScript. Кроме того, деление на 0 равно undefined, поэтому JavaScript технически неверен при возврате нуля. Если я ничего не пропустил, ответ на исходный вопрос должен быть да.
Обновление 2: Соответствующие разделы спецификации ECMAScript 6: как делить числа и как преобразовать в 32-разрядное целое число со знаком, которое что |0
делает.