68 votes

Pourquoi Java ne génère-t-il pas une exception lors de la division par 0.0?

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 doubles. 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 ints serait certainement causer une arithmétique de division par zéro exception. Pourquoi Java ignorer quand il s'agit de doubles?

111voto

Michael Borgwardt Points 181658

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à.

46voto

Kris Points 8813

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.

5voto

Mike Points 1449

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X