Table 4-1 also reveals a few curiosities starting with +infinity, -infinity, +0.0, -0.0,
and NaN (Not a Number).
Java's floating-point calculations are capable of returning +infinity, -infinity, +0.0,
-0.0, and NaN because Java largely conforms to IEEE 754 ( ht-
culations. The following are the circumstances under which these special values arise:
• +infinity returns from attempting to divide a positive number by 0.0. For ex-
ample, System.out.println(1.0/0.0); outputs Infinity .
• -infinity returns from attempting to divide a negative number by 0.0. For ex-
ample, System.out.println(-1.0/0.0); outputs -Infinity .
• NaN returns from attempting to divide 0.0 by 0.0, attempting to calculate the
square root of a negative number, and attempting other strange operations.
For example, System.out.println(0.0/0.0); and Sys-
tem.out.println(Math.sqrt(-1.0)); each output NaN .
• +0.0 results from attempting to divide a positive number by +infinity. For ex-
ample, System.out.println(1.0/(1.0/0.0)); outputs +0.0 .
• -0.0 results from attempting to divide a negative number by +infinity. For ex-
ample, System.out.println(-1.0/(1.0/0.0)); outputs -0.0 .
Once an operation yields +infinity, -infinity, or NaN, the rest of the expression
usually equals that special value. For example, System.out.println(1.0/
0.0*20.0); outputs Infinity . Also, an expression that first yields +infinity or -
infinitymightdevolveintoNaN.Forexample, 1.0/0.0*0.0 yields+infinity( 1.0/
0.0 ) and then NaN (+infinity *0.0 ).
Another curiosity is Integer.MAX_VALUE , Integer.MIN_VALUE ,
Long.MAX_VALUE ,and Long.MIN_VALUE .Eachoftheseitemsisaprimitivetype
wrapper class constant that identifies the maximum or minimum value that can be
represented by the class's associated primitive type. (I discuss primitive type wrapper
classes later in this chapter.)
Finally,youmightwonderwhythe abs() , max() ,and min() overloadedmethods
do not include byte and short versions, as in byte abs(byte b) and short
abs(short s) . There is no need for these methods because the limited ranges of
Listing 4-2. Obtaining absolute values for byte integers and short integers