For an explanation I can only suggest reading the IEEE 754 Standard and the Java Language Specification. There are also interesting documents on the Web if you search for them. Those programmers who are involved in scientific computing need to know this stuff, but for a large number of commercial applications it is not necessary to go into such detail. It is certainly not necessary for SCJP 5.0.
What I love most is Double.NaN != Double.NaN is true