Java Reference
In-Depth Information
Number”, and from then on your results are garbage. Division
x/0D
where
x
is nonzero produces either
Double.POSITIVE_INFINITY
or
Double.NEGATIVE_INFINITY
, and from then on your results are garbage.
Do not divide by 0, except for fun.
•
%
:
Remainder
. e.g
5.2 % 5
evaluates to
0.20000000000000018
. (You
would expect it to evaluate to
0.2
, but roundoff error is involved.)
The arithmetic relations
<
,
<=
,
>
, and
>=
can be used on values of type
dou-
ble
. For example,
1.3241 < 1.3241001
evaluates to
tru
e.
The operators
==
and
!=
can also be used with
double
operands. However,
these operators are rarely used because
double
values are only approximations.
Rather than checking for equality, one usually checks whether two
double
val-
ues are “close enough” —i.e. whether their absolute difference is small enough.
Precedence and associativity of double operators
The double operators have the same precedence and associativity properties
as their
int
counterparts. See Sec. 6.1.
Discussion
Type
double
is not as simple and straightforward as the above introduction
might indicate. This is because
double
numbers are only finite approximations
to real numbers. For example, the value of
Math.PI
, the closest possible approx-
imation to the ratio of the circumference of a circle to its diameter, is
3.141592653589793
but actually the fractional part of this ratio is not finite but goes on forever. It
does not even repeat (e.g. the rational number
1/4
can be written as
.25000...
;
the fraction consists of a non-repeating part
25
followed by a part,
0
, which
repeats forever).
Further, literals (like
3.141592653589793
) are written in decimal, but they
are stored in the computer in binary, and the conversion from decimal to binary
is another source of error.
Finally,
double
operations cannot be exact. For example:
(1D / 48D) * 48D
is printed as
1.0
, but
(1D / 49D) * 49D
is printed as
0.9999999999999999
.
So these two expressions are not equal in
double
arithmetic. Run this loop below
and analyze its output to see some of the approximations that go on. Because
double
values are only approximations, do not write a loop whose loop counter
is a
double
.
Search WWH ::
Custom Search