aspose file tools*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Float & Double Conversion Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Float & Double Conversion " Watch "Float & Double Conversion " New topic
Author

Float & Double Conversion

Serdar Ozturk
Greenhorn

Joined: Aug 12, 2002
Posts: 14
The following code prints:
true
false
9.223372036854776E18 9.223372036854776E18
2.147483647E9 2.147483648E9
System.out.println( (double) Long.MAX_VALUE == (float) Long.MAX_VALUE ); // 1
System.out.println( (double) Integer.MAX_VALUE == (float) Integer.MAX_VALUE); // 2

System.out.println( (double) Long.MAX_VALUE +" " + (double)(float) Long.MAX_VALUE );
System.out.println( (double) Integer.MAX_VALUE +" "+ (double)(float) Integer.MAX_VALUE);

What's happening on line 2?
SerdaR
Shishio San
Ranch Hand

Joined: Aug 29, 2002
Posts: 223
Hi,
It has to do with the precision double and float types use to store the same number.
Remember double type uses 64 bits and float type uses 32 bits


Whatever doesn't kill us ...<br />Is probably circling back for another try.<br />SCJP 1.4
Serdar Ozturk
Greenhorn

Joined: Aug 12, 2002
Posts: 14
well, long is 64-bit wide and there is no loss of precision when you convert it to float first and then to double... on line 1
On line 2, we convert 32-bit integer to float and then to double and we loss some precision.
Why dont we loss any precision on 64-bit long variable but on 32-bit integer?
Serdar
Shishio San
Ranch Hand

Joined: Aug 29, 2002
Posts: 223
Hi,

Widening primitive conversions do not lose information about the overall magnitude of a numeric value. Indeed, conversions widening from an integral type to another integral type and from float to double do not lose any information at all; the numeric value is preserved exactly. Conversion of an int or a long value to float, or of a long value to double, may result in loss of precision-that is, the result may lose some of the least significant bits of the value. In this case, the resulting floating-point value will be a correctly rounded version of the integer value,


Why dont we loss any precision on 64-bit long variable but on 32-bit integer?

Because Long.MAX_VALUE is much bigger than Integer.MAX_VALUE and both double and float won't have any difference in the precision used to represent it. As for Interger.MAX_VALUE, converting to double will preserve more signaficant number than converting it to float and this is again due to the number of bits of each type
Hope this is clearer
smita raval
Greenhorn

Joined: Aug 31, 2002
Posts: 28
But,

is not displaying the same value, then why it displays true while comparing ?


Smita Raval
Shishio San
Ranch Hand

Joined: Aug 29, 2002
Posts: 223
Originally posted by smita raval:
But,

is not displaying the same value, then why it displays true while comparing ?


That's true but the difference btw the two numbers is small enough to be considered as 0.0
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Float & Double Conversion