/ % * を使用せずに式a/b = e^(ln a - ln b)
を使用して悪名高い質問を解決しようとしましたが、一部のテストケースでは解決策が失敗します。Divide 2 Integers
(dividend=Integer.MAX_VALUE or MIN_VALUE and divisor=1)
なぜ失敗するのですか?
[編集]: そのテスト ケースに対して私が得た答えは(MAX-1 or MIN+1)
. なぜこれが起こるのか知りたいです。
public int divide(int dividend, int divisor) {
boolean neg = false;
if ((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0))
neg = true;
long a = dividend;
a = Math.abs(a);
long b = divisor;
b = Math.abs(b);
double res = Math.pow(Math.E, Math.log(a) - Math.log(b));
int ans = Math.floor(res);
return neg ? -ans : ans;
}