2009-10-23 10 views
1

Je ne suis pas un mathématicien, mais je suppose que la division par l'infini est soit une mauvaise mathématique, soit, à tout le moins, impraticable.Diviser par l'infini

Je viens de passer une demi-heure à déboguer mon javascript qui fonctionnait parfaitement bien dans Firefox mais qui me donnait une erreur dans IE. J'ai finalement réalisé que c'était parce que dans certains scénarios, je demandais à IE de diviser par l'infini. Donc, j'ai corrigé cela, mais je suis curieux de savoir pourquoi Firefox était OK avec ça. Certes, cela pourrait être plus une question de mathématiques que de programmation. ;)

+0

Un peu off-point mais toujours intéressant et lié à quelques réponses ici - Division par l'infini peut être simulée physiquement en divisant un nombre par un petit nombre. Par exemple 12/0000000000000.1 est très proche de 12/inf. Essayez d'ajouter un petit nombre. – Phil

+5

@Phil, peut-être que vous vouliez dire un très grand nombre? – Victor

Répondre

5

Je pense que c'est un bug dans IE. Selon les règles de IEEE math, n/Inf = 0 (pour n! = 0). Donc, si IE croque dessus, c'est un problème dans IE. D'un autre côté, utiliser Inf dans des opérations mathématiques ordinaires est problématique, et il vaudrait mieux que votre code ne s'en repose pas en premier lieu.

Pourquoi est-ce dangereux? Eh bien, pour commencer, selon IEEE 754:

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

mais nous savons que 0 = -0, donc

Inf = -Inf 

qui est évidemment indésirable. IEEE ne voulait pas faire d'Inf un numéro ordinaire de toute façon. Inf et NaN existent pour faire de l'arithmétique à virgule flottante dans les ordinateurs avec sa précision intrinsèque limitée et les problèmes de débordement ressemblent à l'arithmétique du monde ordinaire, où, pour prendre l'exemple le plus simple, l'ensemble des nombres réels est fermé. un autre nombre réel). Si vous faites cela avec des flottants de précision finie, vous obtiendrez des cas où l'addition de deux nombres entraîne un débordement. Pour éviter d'avoir à traiter cela comme une condition d'erreur, l'IEEE a introduit deux symboles supplémentaires, Inf et NaN, et un ensemble de règles pour leur comportement. Maintenant, le résultat d'une opération mathématique est toujours un nombre, ou Inf, ou NaN, et si le résultat a un sens ou non est laissé à l'utilisateur.

7

Diviser par l'infini est bien - c'est zéro.

À moins que vous divisant l'infini par l'infini, qui est définie (en général au moins)

+0

oh! Donc, ça explique que Firefox va bien. IE est peut-être mauvais en maths? –

+0

Certains s'inquiètent des signes ici quand vous faites la distinction entre +0 et -0 (ce que font les mathématiques IEEE) ... – dmckee

-1

La division d'un nombre par l'infini est tout à fait raisonnable d'un point de vue mathématique. C'est un nombre infiniment proche de zéro, sans pour autant atteindre zéro. Du point de vue du logiciel, c'est beaucoup plus difficile, car l'infini n'est pas une valeur discrètement représentable. Ma conjecture serait que votre différence de comportement est basée sur des décisions de conception.

Dans Firefox, ils ont probablement choisi de renvoyer une valeur de zéro, car à toutes fins pratiques, ce résultat fonctionnera pour ce dont vous avez besoin. En revanche, dans IE, les développeurs ont délibérément décidé de ne pas vous permettre d'effectuer un calcul pour lequel ils savaient qu'ils ne pouvaient pas donner une réponse discrète.

+1

Non-sens. Un nombre n'approche rien. Une série de nombres fait. – Victor

+0

Infinity est représentable en javascript - alert (Infinity) – Greg

+0

La périphrase pédante est "la limite de n/epsilon comme epsilon se développe sans limite est nul". – dmckee

Questions connexes