Вопрос

Я не математик, но я предполагаю, что деление на бесконечность - это либо плохая математика, либо, по крайней мере, нецелесообразно.

Я просто потратил полчаса на отладку своего javascript, который прекрасно работал в Firefox, но выдает ошибку в IE. Я наконец понял, что это произошло потому, что в определенных сценариях я просил IE разделить на бесконечность.

Итак, я исправил это, но мне любопытно, почему Firefox согласился с этим. Следует признать, что это может быть больше вопросом математики, чем программирование. ;)

Это было полезно?

Решение

Я думаю, что это ошибка в IE. Согласно правилам IEEE по математике, n / Inf = 0 (для n! = 0). Так что, если IE квакает из-за этого, это проблема в IE. С другой стороны, использование Inf в обычных математических операциях проблематично, и вам было бы лучше, если бы ваш код изначально не полагался на него.

Почему это опасно? Ну, для начала, согласно IEEE 754:

1/0 = Inf
1/-0 = -Inf

но мы знаем, что 0 = -0, следовательно,

Inf = -Inf

что явно нежелательно. IEEE не хотел делать Inf обычным числом. Inf и NaN существуют для того, чтобы сделать арифметику с плавающей запятой в компьютерах с присущей ей ограниченной точностью и проблемами переполнения похожими на обычную арифметику, где, если взять простейший пример, набор действительных чисел при сложении закрыт (добавление двух действительных чисел всегда приводит другое действительное число). Если вы сделаете это с плавающей запятой конечной точности, вы получите случаи, когда добавление двух чисел приводит к переполнению. Чтобы избежать необходимости рассматривать это как условие ошибки, IEEE ввел два дополнительных символа, Inf и NaN, и набор правил для их поведения. Теперь результатом математической операции всегда является число, или Inf, или NaN, и вопрос о том, имеет ли результат какой-либо смысл или нет, остается за пользователем.

Другие советы

Делить на бесконечность - это хорошо - это ноль.

Если вы не делите бесконечность на бесконечность, которая не определена (по крайней мере, в общем)

Деление числа на бесконечность вполне разумно с математической точки зрения. Это число бесконечно близко к нулю, фактически не достигая нуля.

С точки зрения программного обеспечения это намного сложнее, поскольку бесконечность не является дискретно представимым значением. Я думаю, что ваша разница в поведении основана на дизайнерских решениях.

В Firefox они, вероятно, решили вернуть нулевое значение, поскольку для всех практических целей этот результат будет работать для того, что вам нужно.

В IE, с другой стороны, кажется, что разработчики приняли сознательное решение не позволять вам выполнять вычисления, для которых они знали, что не могут дать дискретный ответ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top