[ http://issues.apache.org/jira/browse/MATH-154?page=comments#action_12425314 ] Remi Arntzen commented on MATH-154: -----------------------------------
a better implementation: long addAndCheck(long a, long b) { long max = Math.max(a, b); long min = Math.min(a, b); long sum = a + b; String overflow = "Overflow: add"; if (max == 0 || min == 0) ( return sum; } else if (max > 0 && min > 0) { if (Long.MAX_VALUE - max < min) { throw new RuntimeException(overflow); } } else if (max < 0 && min < 0) { if (Long.MIN_VALUE - min < max) { throw new RuntimeException(overflow); } } else { return sum; } } long subAndCheck(long a, long b) { long max = Math.max(a, b); long min = Math.min(a, b); long diff = a - b; String overflow = "Overflow: add"; if (max == 0 || min == 0) { return diff; } else if (max > 0 && min < 0) { if (max == a) { if (max - Long.MAX_VALUE > min) { throw new RuntimeException(overflow); } } else if (max == b) { if (min - Long.MIN_VALUE < max) { throw new RuntimeException(overflow); } } } else { return sum; } } > MathUtils addAndCheck and subAndCheck for long values > ----------------------------------------------------- > > Key: MATH-154 > URL: http://issues.apache.org/jira/browse/MATH-154 > Project: Commons Math > Issue Type: Improvement > Affects Versions: Nightly Builds, 1.1 Final > Reporter: Remi Arntzen > > public static long addAndCheck(long x, long y) { > BigInteger s = BigInteger.valueOf(x).add(BigInteger.valueOf(y); > if (s.bitLength() + 1 > Long.SIZE) { > throw new ArithmeticException("overflow: add"); > } > return s.longValue(); > } > public static long subAndCheck(long x, long y) { > BigInteger s = BigInteger.valueOf(x).subtract(BigInteger.valueOf(y)); > if (s.bitLength() + 1 > Long.SIZE) { > throw new ArithmeticException("overflow: add"); > } > return s.longValue(); > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]