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

DNN*_*NNX 12 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;
Run Code Online (Sandbox Code Playgroud)

Mic*_*rdt 12

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

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

  • Java缺少浮点异常并不是因为*它实现了IEEE 754. Java虚拟机特别是*[不同](http://java.sun.com/docs/books/jvms/second_edition/html/ Overview.doc.html#35254)*来自IEEE 754,没有任何方法可以捕获或标记这些条件. (7认同)