(x + y)/2
Java で任意の 2 つの整数 x、yを計算する方法が欲しいです。x+y > Integer.MAX_VALUE、または < Integer.MIN_VALUE の場合、単純な方法では問題が発生します。
グアバIntMath
は次の手法を使用します。
public static int mean(int x, int y) {
// Efficient method for computing the arithmetic mean.
// The alternative (x + y) / 2 fails for large values.
// The alternative (x + y) >>> 1 fails for negative values.
return (x & y) + ((x ^ y) >> 1);
}
...しかし、これは負の無限大に丸められます。つまり、ルーチンは {-1, -2} (-1 ではなく -2 を与える) のような単純な値の方法と一致しません。
0 に向かって切り捨てられる対応するルーチンはありますか?
長い入力でも機能するメソッドが必要なため、 「ただ使用するlong
」は私が探している答えではありません。BigInteger
私が探している答えでもありません。ブランチを使用したソリューションは必要ありません。