I'm just curious about this:
When evaluating 1/0
in Java, the following exception occurs:
Exception in thread "main" java.lang.ArithmeticException: / by zero at Foo.main(Foo.java:3)
But 1/0.0
is evaluated to Infinity
.
public class Foo { public static void main (String[] args) { System.out.println(1/0.0); } }
Why does this happen?
If one of the operands in you division is a float and the other one is a whole number ( int , long , etc), your result's gonna be floating-point. This means, this will be a floating-point division: if you divide 5 by 2, you get 2.5 as expected.
Dividing by zero is an operation that has no meaning in ordinary arithmetic and is, therefore, undefined.
The division operator / means integer division if there is an integer on both sides of it. If one or two sides has a floating point number, then it means floating point division. The result of integer division is always an integer.
Java will not throw an exception if you divide by float zero. It will detect a run-time error only if you divide by integer zero not double zero. If you divide by 0.0, the result will be INFINITY.
That's because integers don't have values for +/-Inf, NaN, and don't allow division by 0, while floats do have those special values.
1/0 is a division of two ints, and throws an exception because you can't divide by integer zero. However, 0.0 is a literal of type double, and Java will use a floating-point division. The IEEE floating-point specification has special values for dividing by zero (among other thing), one of these is double.Infinity.
If you're interested in details, the floating-point spec (which is often cryptic) has a page at Wikipedia: http://en.wikipedia.org/wiki/IEEE_754-2008, and its full text can be also read online: http://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=4610933.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With