如何强制Java抛出算术exception?

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

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; 

由于Java实现了浮点运算的IEEE 754标准,因此要求这些操作返回具有“非数字”或“无穷大”含义的特定位模式,因此不可能使Java抛出这些操作的exception。

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

我想,你必须手动检查,例如

 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); 

此代码将抛出ArithmeticException

 int x = 1 / 0;