Javaの:なぜ大きな正の数の原因の負の結果を乗算しますか?

C.ペック:

私は、Javaとの整数を乗じ、いくつかの奇妙な行動を見ています。私はいくつかのコーディングの練習をして、運動の次フィズ話題タイプに出くわしました。要件:整数を指定するには、指定された整数よりも小さい3のすべての複数の製品を見つける機能記述を除き、我々は返すようにしたい17与えられた5例:任意の複数を、12 * 9 * 6 * 3(= 1944)。私は、次のように書きました:

public int findProduct(int limit) { 
    int product = 1;
    for(int n = 3; n < limit; n = n + 3) {
        if (n % 5 != 0) {
            product = product * n;
        }
    }
    return product;
}

これは少数のためにうまく動作します。しかし、テストでは、私はあなたが33を超える得れば何とか戻り値が道オフになっていることがわかりました。私は36の限界との関数を呼び出した場合、例えば、それは-1.466221696E9を返します。私は混乱する場所です。私は、乗算しています正の整数を、結果は何とか否定的です。

しかし、私はあなたがダブルを宣言した場合、常に正しい結果を返すように見えることを発見しました。

public double findProduct(int limit) { 
    double product = 1;
    for(int n = 3; n < limit; n = n + 3) {
        if (n % 5 != 0) {
            product = product * n;
        }
    }
    return product;
}

私の質問は:なぜこれが整数とそれが正しく行わせるdouble型の相違点で起こっているのでしょうか?

Aniket Sahrawat:

ので、これが起こるMAX_VALUEのですまた、置き換えることができ、結果を期待します。int2147483647intlong

System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Long.MAX_VALUE); // 9223372036854775807
System.out.println(Double.MAX_VALUE); // 1.7976931348623157E308

一度Integer達しMAX_VALUE、それはオーバーフローに開始されますし、負の値になってしまいます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=196706&siteId=1