可能性の重複:
How can I check if multiplying two numbers in Java will cause an overflow?Javaコードで整数オーバーフローを防ぐ方法は?
私は*
と+
操作を使用するJavaクラスのメソッドを、持っていると仮定します。
int foo(int a, int b) { ... // some calculations with + and * }
foo
にオーバーフローが発生しないようにする方法を教えてください。
int sum(int a, int b) { int c = a + b; if (a > 0 && b > 0 && c < 0) throw new MyOverfowException(a, b) return c; } int prod(int a, int b) { int c = a * b; if (a > 0 && b > 0 && c < 0) throw new MyOverfowException(a, b) return c; }
は何int
オーバーフローがJavaメソッドで発生していないことを確認するために、より良い方法があります。
は私がBigDecimal
を使用するか、またはすべての+と*のような「ラッパー」で置き換えることができますいずれかを推測しますか?
なぜゼロ以下になっているかチェックしますか? intは0よりもかなり下になる可能性があります。 – 11684
正確には、これはintの範囲です:-2,147,483,648から2,147,483,647 – 11684
値を固定しますか? –