Деление на безкрайност

Не съм математик, но предполагам, че делението на безкрайност е или лоша математика, или най-малкото непрактично.

Току-що прекарах половин час в отстраняване на грешки в моя javascript, който работеше перфектно във Firefox, но ми даваше грешка в IE. Най-накрая разбрах, че е така, защото в определени сценарии исках от IE да дели на безкрайност.

И така, поправих това, но ми е любопитно защо Firefox беше ОК с това. Вярно е, че това може да е по-скоро въпрос на математика, отколкото на програмиране. ;)


person DA.    schedule 23.10.2009    source източник
comment
Малко неточно, но все пак интересно и свързано с някои отговори тук - Делението на безкрайност може да бъде симулирано физически чрез разделяне на число на малко число. Например 12/0000000000000.1 е много близо до 12/inf. Опитайте да добавите малко число.   -  person Phil    schedule 23.10.2009
comment
@Phil, може би имаш предвид много голямо число?   -  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
Infinity може да се представи в javascript - предупреждение (Infinity) - person Greg; 23.10.2009
comment

ако вашето решение за регистриране има толкова специални изисквания, че готовото решение не работи, тогава може би създаването на персонализирана версия може да си струва.

Ако обаче това е аргументът, човек може също да обмисли изтегляне на рамка с отворен код и да се опита да я персонализира.

- 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