如何强制Java抛出算术异常?

时间:2010-02-17 14:09:23

标签: java exception

如何强制Java在除以0.0或从负双精度中提取根时抛出算术异常?代码如下:

   double a = 1; // or a = 0 to test division by 0
   double b = 2;
   double c = 100;

   double d = b*b - 4*a*c;
   double x1 = (-b - Math.sqrt(d)) / 2 / a;
   double x2 = (-b + Math.sqrt(d)) / 2 / a;

3 个答案:

答案 0 :(得分:12)

不可能使Java为这些操作抛出异常,因为Java实现了浮点运算的IEEE 754标准,该标准要求这些操作应返回具有“非数字”或“无限”含义的特定位模式”

如果您想特别处理这些情况,可以将结果与相应的常量(如Double.POSITIVE_INFINITY)进行比较(对于NaN,您必须使用isNAN()方法,因为NaN!= NaN)。请注意,您不必在每次单独操作后进行检查,因为后续操作将保持NaN或Infinity值。只需检查最终结果。

答案 1 :(得分:2)

我认为,你必须手动检查,例如

public double void checkValue(double val) throws ArithmeticException {
    if (Double.isInfinite(val) || Double.isNaN(val))
        throw new ArithmeticException("illegal double value: " + val);
    else
        return val;
}

所以对你的例子

double d = checkValue(b*b - 4*a*c);
double x1 = checkValue((-b - Math.sqrt(d)) / 2 / a);
double x2 = checkValue((-b + Math.sqrt(d)) / 2 / a);

答案 2 :(得分:-1)

此代码将抛出ArithmeticException

int x = 1 / 0;