Java Reference
In-Depth Information
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-
tp://en.wikipedia.org/wiki/IEEE_754
)
,astandardforfloating-pointcal-
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
bytesandshortintegersmakethemunsuitableincalculations.Ifyouneedsuchameth-
od, check out
Listing 4-2
.
Listing 4-2.
Obtaining absolute values for byte integers and short integers