我想要一种(x + y)/2
在 Java 中计算任意两个整数 x、y 的方法。如果 x+y > Integer.MAX_VALUE 或 < Integer.MIN_VALUE,则幼稚的方法会遇到问题。
GuavaIntMath
使用这种技术:
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} (给出 -2,而不是 -1)这样的值的幼稚方式。
是否有任何相应的例程向 0 截断?
“只需使用long
”不是我正在寻找的答案,因为我想要一种也适用于长输入的方法。BigInteger
也不是我正在寻找的答案。我不想要任何分支的解决方案。