Деление на бесконечность - PullRequest
       9

Деление на бесконечность

1 голос
/ 23 октября 2009

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

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

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

Ответы [ 3 ]

8 голосов
/ 23 октября 2009

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

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

6 голосов
/ 23 октября 2009

Я думаю, что это ошибка в 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, и вопрос о том, имеет ли результат какой-либо смысл или нет, остается за пользователем.

0 голосов
/ 23 октября 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...