【问题标题】:Condition for overflow in google guava librarygoogle guava 库中溢出的条件
【发布时间】:2015-01-10 05:51:57
【问题描述】:

这是 LongMath.checkedAdd() 方法的代码,该方法在溢出或下溢时抛出算术异常。

public static long checkedAdd(long a, long b) {
  long result = a + b;
  checkNoOverflow((a ^ b) < 0 | (a ^ result) >= 0);
  return result;
}

static void checkNoOverflow(boolean condition) {
  if (!condition) {
    throw new ArithmeticException("overflow");
  }
}

我理解为什么这个 API 正在测试 (a ^ result) 但我不明白包含这个条件的原因: (a ^ b)

【问题讨论】:

  • 如果ab 的符号相反,那么它们的加法 不可能溢出。
  • 你说得对,我错过了!适合这种情况。

标签: math overflow guava integer-arithmetic underflow


【解决方案1】:

正如 GregS 所写,如果 ab 的符号相反(*),那么它们的相加不可能溢出。现在,如果它们的符号相同,那么如果有mo溢出,结果的符号必须相同。


(*) 与零和正数相同,这无关紧要,使条件简单。

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多