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

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

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

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


person DA.    schedule 23.10.2009    source источник
comment
Немного не в тему, но все же интересно и связано с некоторыми ответами здесь. Деление на бесконечность можно смоделировать физически, разделив число на небольшое число. Например, 12/0000000000000,1 очень близко к 12/инф. Попробуйте добавить небольшое число.   -  person Phil    schedule 23.10.2009
comment
@ Фил, может быть, ты имел в виду очень большое число?   -  person Victor    schedule 23.10.2009


Ответы (3)


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

person wallenborn    schedule 23.10.2009

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

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

person Greg    schedule 23.10.2009
comment
ой! Итак, это объясняет, что с Firefox все в порядке. IE может быть плох в математике? - person DA.; 23.10.2009
comment
Некоторые беспокоятся о знаках здесь, когда вы различаете +0 и -0 (что делает математика IEEE)... - person dmckee --- ex-moderator kitten; 23.10.2009

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

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

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

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

person Mike Clark    schedule 23.10.2009
comment
Бред какой то. Номер ни к чему не подходит. Числовой ряд делает. - person Victor; 23.10.2009
comment
Бесконечность представляется в javascript - предупреждение (Бесконечность) - person Greg; 23.10.2009
comment
Педантичное иносказание - это предел n / эпсилон, поскольку эпсилон неограниченно растет, равен нулю. - person dmckee --- ex-moderator kitten; 23.10.2009
comment
Деление действительного числа на бесконечность не совсем разумно с математической точки зрения. Бесконечность не является реальным числом! Символ бесконечности используется в математике для действительных чисел в определенных контекстах (например, в ограничениях), но это всего лишь обозначения. - person Jason Orendorff; 01.12.2009
comment
Кроме того: это не то, что браузеры могут выбирать случайным образом. Стандарт ECMAScript определяет, как должны вести себя числа. bclary.com/2004/11/07/#a-11.5.2< /а> - person Jason Orendorff; 01.12.2009