En JavaScript, pourquoi n'zéro divisé par zéro retour NaN, mais de toute autre divisé par zéro retour Infini?
Il me semble que le code
console.log(1 / 0)
doit retourner NaN
, mais au lieu de cela, il retourne Infinity
. Cependant ce code:
console.log(0 / 0)
ne retour NaN
. Quelqu'un peut-il m'aider à comprendre le raisonnement de cette fonctionnalité? Non seulement il ne semble être en contradiction, il semble également avoir du mal, dans le cas de x /0
où x !== 0
- stackoverflow.com/questions/3215120/...
- Il y a un tutoriel décent ici
- Il existe une infinité de zéros dans n'importe quel nombre, de sorte
x / 0 === Infinity
semble logique pour moi.
Vous devez vous connecter pour publier un commentaire.
Parce que c'est comment à virgule flottante est défini de façon plus générale que Javascript). Voir par exemple:
Grossièrement parlant, vous pourriez penser à 1/0 comme la limite de 1/x quand x tend vers zéro. Et 0/0 a aucune interprétation raisonnable du tout, donc NaN.
En plus des réponses basées sur le concept mathématique de zéro, il existe un compte spécial pour les nombres en virgule flottante. Chaque underflow résultat, tous les non-nulle dont la magnitude absolue est trop faible pour représenter un nombre différent de zéro, est représenté comme le zéro.
0/0 peut vraiment être 1e-500/1e-600, ou 1e-600/1e-500, ou de nombreux autres ratios de très petites valeurs.
Le rapport réel pourrait être n'importe quoi, donc il n'y a pas de véritable réponse chiffrée, et le résultat devrait être un NaN.
Maintenant envisager de 1/0. Il n'est pas question de savoir si le 0 représente 1e-500 ou 1e-600. Peu importe, la division de débordement et le résultat correct est la valeur utilisée pour représenter des débordements de l'Infini.
a
,b
, etc
sont dans un ordre de grandeur de chacun des autres, et que l'on souhaite afficher la somme exacte à quatre chiffres significatifs, sachant quea+b+c
sera une valeur de 1 ppm de la bonne [réelle précision, en fait, mieux peut-être plus utile qu'un précis du terme d'erreur.Je réalise que c'est vieux, mais je pense qu'il est important de noter qu'en JS il est également un
-0
qui est différent de celui0
ou+0
ce qui rend cette fonction de JS beaucoup plus logique qu'au premier coup d'œil.qui logiquement est logique, puisque dans le calcul, la raison, la division par 0 n'est pas défini est uniquement parce que la limite gauche va à l'infini négatif et la limite à droite de l'infini positif. Depuis le
-0
et0
sont différents objets en JS, il est préférable d'appliquer le positif de 0 à évaluer positifInfinity
et le négatif de 0 à évaluer négatifInfinity
Cette logique ne s'applique pas aux
0/0
, qui est de durée indéterminée. Contrairement à1/0
, nous pouvons obtenir deux résultats en prenant les limites de cette méthode avec0/0
qui est évidemment incompatible, donc il en résulte NaN
lim h -> 0 (h / h)
. Depuis JS a de positif et de négatif zéros, il devrait également être un positif et un négatif limite. Ainsi seulement 0/0 et -0/0 devrait aboutir à NaN. Les autres devraient être positifs ou négatifs de l'infini. Bien sûr, le mathématicien qui est en moi est en train de pleurer comme un bébé.