Java输出给我“无限”

时间:2017-04-18 16:37:58

标签: java math runtime-error divide-by-zero

我写的Java程序的输出在我得到一个数字时给了我“Infinity”。我正在使用花车,我不认为我的数字超出了花车可以处理的范围。

我的问题是,如果Java计算的值大于使用的数据类型可以处理的值,我会不会将“Infinity”作为输出?或者只有在某处意外地将零除以零时才返回“无限”。

3 个答案:

答案 0 :(得分:3)

JLS非常明确地回答了这个问题。

  

溢出的浮点运算会产生有符号的无穷大。

你可能在某处除以零,但你可以检查。

double b = 1.1*Double.MAX_VALUE;
System.out.println(b);

显示为无限。

答案 1 :(得分:2)

请参阅此处的回答:What are the INFINITY constants in Java, really?

当你的操作离开浮动范围时,默认情况下你会得到无穷大。然而,正如你所说,无穷大通常以零分割开始,或者循环(或过大的)操作开始。如果您发布代码片段,我可以向您提供有关其未受保护的内容的提示。

   Operation            Result
n ÷ ± Infinity           0
±Infinity × ±Infinity   ±Infinity
±nonzero  ÷ 0           ±Infinity
Infinity  + Infinity    Infinity
±0 ÷ ±0                 NaN
Infinity - Infinity     NaN
±Infinity ÷ ±Infinity   NaN
±Infinity × 0           NaN

答案 2 :(得分:2)

是的,根据这个: Maximum value for Float in Java? float可以拥有的最大值是Float.MAX_VALUE。

您可能希望使用调试器进行一些简单的检查,除非您将此浮点值除以。或者,您可以使用日志语句来填充代码。

有一个名为StackTraceElement的类,由Thread类提供。您可以使用它来查看哪个类/行号。

https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#getStackTrace() https://docs.oracle.com/javase/7/docs/api/java/lang/StackTraceElement.html

说你有这样的事情:

float result = A / B;

任何时候你看到这样的东西,你都可以使用这个简单的print语句:

float result = A / B;
System.out.format("Divisor: %d, Dividend: %d, result: %d", A, B, result);
// alternatively, add in the stack trace stuff.

一旦找到罪魁祸首,原因可能非常明显。我的想法是你可能正在将这个'B'值初始化为0,但是从不将它设置为你实际想要除以的浮点数。