J'ai le code pour calculer la différence de pourcentage entre les 2 numéros - (oldNum - newNum) / oldNum * 100;
- , où les deux nombres sont double
s. J'ai attendu d'avoir à ajouter une sorte de contrôle / gestion exception en cas oldNum est de 0. Cependant, quand j'ai fait un test avec des valeurs de 0,0 pour les deux oldNum et newNum, l'exécution continue comme si rien ne s'était passé, et aucune erreur n'a été levée. L'exécution de ce code avec int
s serait certainement causer une arithmétique de division par zéro exception. Pourquoi Java ignorer quand il s'agit de double
s?
Réponses
Trop de publicités?Java float
et double
types, comme à peu près toute autre langue de là-bas (et à peu près tout le matériel FP unité), de mettre en œuvre la norme IEEE 754 la norme de calcul en virgule flottante, qui prévoit la division par zéro pour revenir à un "débordement" de la valeur. Lancer une exception serait en fait violer cette norme.
L'arithmétique des nombres entiers (mis en œuvre en tant que complément à deux de la représentation par Java et la plupart des autres langues et matériel) est différente et n'a aucune spécial de l'infini ou de valeurs NaN, jetant ainsi les exceptions est utile de comportement là.
Le résultat de la division par zéro est, mathématiquement parlant, indéfini, ce qui peut être exprimé avec un float / double (comme NaN - pas un nombre), mais il n’est pas faux en réalité.
Comme un entier doit contenir une valeur numérique spécifique, une erreur doit être générée lors de la division par zéro lors de leur traitement.
La façon dont un double est stockée est assez différent d'un int. Voir http://firstclassthoughts.co.uk/java/traps/java_double_traps.html pour une explication plus détaillée sur la façon dont Java poignées double calculs. Vous devriez aussi lire sur les nombres à virgule Flottante, en particulier, le concept de Pas un Nombre (NaN).
Si vous êtes intéressés à en apprendre plus sur la représentation à virgule flottante, je vous conseille la lecture de ce document (format Word, désolé). Elle plonge dans la représentation binaire des nombres, qui peuvent être utiles à votre compréhension.