java大数相乘,希望出界抛异常。

如题,
我自己测试的时候,如果两个int型大数相乘,结果为负,求检测溢出的方法,并掷出异常的代码

[code="java"]
/**
* Multiply two integers, checking for overflow.
*
* @param x a factor
* @param y a factor
* @return the product x*y
* @throws ArithmeticException if the result can not be represented as an
* int
* @since 1.1
*/
public static int mulAndCheck(int x, int y) {
long m = ((long)x) * ((long)y);
if (m < Integer.MIN_VALUE || m > Integer.MAX_VALUE) {
throw new ArithmeticException("overflow: mul");
}
return (int)m;
}

/**
 * Multiply two long integers, checking for overflow.
 *
 * @param a first value
 * @param b second value
 * @return the product <code>a * b</code>
 * @throws ArithmeticException if the result can not be represented as an
 *         long
 * @since 1.2
 */
public static long mulAndCheck(long a, long b) {
    long ret;
    String msg = "overflow: multiply";
    if (a > b) {
        // use symmetry to reduce boundary cases
        ret = mulAndCheck(b, a);
    } else {
        if (a < 0) {
            if (b < 0) {
                // check for positive overflow with negative a, negative b
                if (a >= Long.MAX_VALUE / b) {
                    ret = a * b;
                } else {
                    throw new ArithmeticException(msg);
                }
            } else if (b > 0) {
                // check for negative overflow with negative a, positive b
                if (Long.MIN_VALUE / b <= a) {
                    ret = a * b;
                } else {
                    throw new ArithmeticException(msg);

                }
            } else {
                // assert b == 0
                ret = 0;
            }
        } else if (a > 0) {
            // assert a > 0
            // assert b > 0

            // check for positive overflow with positive a, positive b
            if (a <= Long.MAX_VALUE / b) {
                ret = a * b;
            } else {
                throw new ArithmeticException(msg);
            }
        } else {
            // assert a == 0
            ret = 0;
        }
    }
    return ret;
}

[/code]
以上是commons-math-2.2的源码
[url]http://commons.apache.org/math/download_math.cgi[/url]

[code="java"]
int c = a*b;
if(c/b!=a){
System.out.println("溢出");
}
[/code]

这是一个大概的思路,楼主可以尝试一下