jQuery in Action
[Logo] JavaRanch » JavaRanch Saloon
  Search | FAQ | Recent Topics | Hot Topics
Register / Login


Win a copy of Flex 4 in Action this week in the Flex forum!
Reply Bookmark it! Watch this topic JavaRanch » Forums » Professional Certification » Programmer Certification (SCJP)
 
RSS feed
 
New topic
Author

SCJP 1.5 implicit cast of long to double

Harry Henriques
Ranch Hand

Joined: Jun 17, 2009
Messages: 151

Hi,

I was preparing for the SCJP using K & B SCJP 1.5 Certification textbook. Page 184 in Chapter 3 states the following:

double d = 100L; // Implicit cast
In the preceding statement, a double is initialized with a long value (as denoted by
the L after the numeric value). No cast is needed in this case because a double can
hold every piece of information that a long can store.


I wrote the following snippet to test this assertion using an implicit cast from "long" to "double":



I got the follwing output after successfully compiling the program.

C:\TEMP>java test
9.223372036854776E18

This converts to 9,223,372,036,854,776,000. Obviously, the binary number above doesn't end in three zeros. It appears that the "double" value has lost precision. I don't know if this is an automatic rounding error in the System.out.println() method, or whether the double has indeed lost precision. How can a 64-bit "long" fit into a 64-bit "double" that has a mantissa and exponent?

Thanks.

SCJP-5 88% SCJD (pending)
Harry Henriques
Ranch Hand

Joined: Jun 17, 2009
Messages: 151

I made an error when I defined a long integer with value 2^63 - 1. I have corrected my mistake. Sorry.




C:\TEMP>java test
9.223372036854776E18 == 9,223,372,036,854,776,000

SCJP-5 88% SCJD (pending)
Henry Wong
author
Bartender

Joined: Sep 28, 2004
Messages: 10007

No cast is needed in this case because a double can hold every piece of information that a long can store.


This statement isn't really true. Java will allow the implicit cast because the range of a long is smaller than (and within) the range of a double. Some precision will be lost, but precision lost is allowed for an implicit cast.

Henry

Books: Java Threads, 3rd Edition, Jini in a Nutshell, and Java Gems (contributor)
Rob Prime
Bartender

Joined: Oct 27, 2005
Messages: 8825

Which is odd because the compiler complains about a "possible loss of precision" when trying to implicitly convert a long to an int, yet this exact same possible loss of permission is allowed when converting from a long to a float or double.

They really should change that error message: "possible range violation" seems better.

SCJP 1.4 - SCJP 6 - SCWCD 5
How To Ask Questions How To Answer Questions
Jesper Young
Java Cowboy
Bartender

Joined: Aug 16, 2005
Messages: 7857

Moving to the SCJP forum.

Java Beginners FAQ - JavaRanch SCJP FAQ
The Java Tutorial - Java SE 6.0 API documentation
 
 
 
Reply Bookmark it! Watch this topic JavaRanch » Forums » Professional Certification » Programmer Certification (SCJP)
 
RSS feed
 
New topic
JProfiler
Get rid of your performance problems and memory leaks!