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

posted

0

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

posted

0

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