Pergunta

Eu não sou um matemático, mas presumo dividindo pelo infinito ou é ruim de matemática, ou, pelo menos, impraticável.

Eu apenas passar uma hora e meia de depuração meu javascript que estava funcionando perfeitamente bem no Firefox, mas estava me dando um erro no IE. Eu finalmente percebi que era porque em determinados cenários, eu estava perguntando IE para dividir por infinito.

Então, eu fixo que, mas estou curioso para saber por Firefox foi OK com isso. Evidentemente, isso pode ser mais uma questão de matemática do que a programação. ;)

Foi útil?

Solução

Eu acho que é um bug no IE. De acordo com as regras do IEEE matemática, n / Inf = 0 (para n! = 0). Então, se IE croaks sobre isso, é um problema no IE. Por outro lado, usando Inf em operações matemáticas comuns é problemático, e você estaria melhor se o seu código não contar com ele em primeiro lugar.

Por que é perigoso? Bem, para começar, de acordo com IEEE 754:

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

mas sabemos que 0 = -0, daí

Inf = -Inf

que é obviamente indesejável. IEEE não queria fazer Inf um número qualquer maneira ordinária. Inf e NaN existe para fazer aritmética de ponto flutuante em computadores com seus inerentes problemas de precisão limitada e estouro de se assemelhar a aritmética do mundo comum, onde, para tomar o exemplo mais simples, o conjunto dos números reais é fechado sob adição (adição de dois números reais sempre resulta em outro número real). Se você fizer isso com flutuadores finito de precisão, você vai ter casos em que a adição de dois números resulta em um estouro. Para evitar ter que tratar isso como uma condição de erro, IEEE introduziu dois símbolos extra, Inf e NaN, e um conjunto de regras para seu comportamento. Agora o resultado de uma operação matemática é sempre um número, ou Inf ou NaN, e se o resultado faz algum sentido ou não é deixada para o usuário.

Outras dicas

Dividindo por infinito é bom -. É de zero

A menos que você está dividindo o infinito pelo infinito, que é indefinido (em geral, pelo menos)

Dividir um número por infinito é perfeitamente razoável do ponto de vista matemático. É um número infinitamente perto de zero, sem realmente chegar a zero.

De uma perspectiva de software, isso é muito mais difícil, como o infinito não é um valor discretamente representável. Meu palpite seria que a sua diferença no comportamento é baseado em decisões de design.

No Firefox, eles provavelmente escolheu para retornar um valor de zero, uma vez que para todos os efeitos práticos, este resultado vai trabalhar para o que você precisa.

No IE, por outro lado, parece que os desenvolvedores tomou a decisão consciente de não permitir que você realizar um cálculo que eles sabiam que não poderia dar uma resposta discreta para.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top