JavaでスローはArithmeticException
-
23-09-2019 - |
質問
のJavaは、(数/ 0)はArithmeticExceptionをスロー。 これはなぜ起こるのでしょうか?
解決
整数がないのに対し、IEEE-754浮動小数点数は、無限の表現を持っているので。
言い換えれば、int
内のすべてのビットパターンは、通常の整数を表します。浮動小数点値は、むしろより+/-無限大、「非数」(NaNの)値、正規化された値、非正規の値などを合併している。
他のヒント
ここからの
ほとんどすべての現代のプロセッサでサポートされているIEEE浮動小数点標準、ゼロによる除算を含むすべての浮動小数点演算は、明確に定義された結果を有することを指定します。標準的な支持体は無限大とNaN(非数)と同様に、ゼロに署名しました。 2ゼロ、+0(正のゼロ)及び-O(負のゼロ)、この除去する任意の曖昧分割あります。負正、負の無限大であり、NaNに=±0ときにIEEE 754算術演算では、÷0は正の無限大です。割ったときに-0の代わりに無限大の兆候が変更されます。
結果のための整数表現が存在しないので、ゼロによる整数の分割は、通常、異なる浮動小数点から処理されます。試みがゼロによる整数を分割するように構成されているときに他の人が単に継続し、除算の誤った結果を生成するが、いくつかのプロセッサは、例外を発生させます。結果は、除算の実装方法に依存し、どちらかがゼロ、又は時には最大可能整数であることができる。
また、あなたが言うJLSを確認することができます:
15.17.2部門オペレータ
一方、整数除算における除数の値が0である場合、次いで
ArithmeticExceptionがスローされます。
浮動小数点除算の結果の仕様によって決定されます
IEEE演算:
結果がNaNでない場合は、両方のオペランドが持っている場合、結果の符号は正であります
同じ符号は、負のオペランドが異なる符号を持っている場合。
符号付き無限大にゼロ結果によって非ゼロ有限値の除算。
記号は上述の規則によって決定されます。