Question

En Java, (nombre / 0) renvoie une ArithmeticException while (Nombre / 0.0) = Infinity. Pourquoi cela?

Était-ce utile?

La solution

Parce que les nombres à virgule flottante IEEE-754 ont une représentation à l'infini, alors que les entiers ne le font pas.

En d'autres termes, chaque motif de bits en int représente un nombre entier normale; Les valeurs à virgule flottante sont un peu plus compliquées avec +/- l'infini, les valeurs « pas un nombre » (NAN), des valeurs normalisées, les valeurs subnormales etc.

Autres conseils

D'ici

La norme IEEE à virgule flottante, soutenu par la quasi-totalité des processeurs modernes, précise que chaque opération arithmétique en virgule flottante, y compris la division par zéro, a un résultat bien défini. La norme prend en charge signé zéro, ainsi que l'infini et NaN (pas un nombre). Il y a deux zéros, +0 (zéro positif) et -0 (zéro négatif), ce qui supprime toute ambiguïté lors de la division. En arithmétique IEEE 754, a ÷ 0 est infini positif lorsque a est infini positif, négatif lorsque a est négatif et NaN quand a = ± 0. Les signes de l'infini changent lors de la division par -0 à la place.

division entière par zéro est habituellement traitée différemment de virgule flottante puisqu'il n'y a aucune représentation entière du résultat. Certains processeurs génèrent une exception lorsqu'une tentative de diviser un entier par zéro, bien que d'autres vont tout simplement continuer et générer un résultat incorrect pour la division. Le résultat dépend de la mise en œuvre est la division, et peut être soit zéro, ou parfois le plus grand entier possible.

Vous pouvez également consulter la JLS qui dit:

Division 15.17.2 Opérateur
D'autre part, si la valeur du diviseur dans une division entière est 0, une ArithmeticException est levée.

Le résultat d'une division à virgule flottante est déterminée par la spécification de arithmétique IEEE: Si le résultat est NaN, le signe du résultat est positif si les deux opérandes ont le même signe, négatif si les opérandes ont des signes différents.
Division d'une valeur finie non nulle par un zéro aboutit à une infinité signé. Le signe est déterminé par la règle énoncée ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top