This week's giveaway is in the Android forum. We're giving away four copies of Android Security Essentials Live Lessons and have Godfrey Nolan on-line! See this thread for details.

Integer.MAX_VALUE has 31 bits of precision plus a sign.

A 32 bit float has 8 bits for the exponent, 23 bits for the fraction, and a sign bit. So a float loses precision (not magnitude) in the conversion from a 31 bit value.

A 64 bit double has 11 bits for the exponent, 52 bits for the fraction, and a sign bit. So double can hold a 31 bit value with no loss of precision.

Comparing an approximate number to an exact number, we get an unequal result.

Dear Mike If your Logic is fitting in this case tehn, why do the same thing is not happening for Long.MAX_VALUE

Mike Gershman
Ranch Hand

Joined: Mar 13, 2004
Posts: 1272

posted

0

Dear Rituparno:

Thanks for your excellent question. And I thought young'uns today didn't care about bits and bytes.

Please first run the following enhancement to Vishnu's program and examine the results:

Integer.MAX_VALUE comes out differently when it is first converted to a float and then to a double than when it is converted directly to a double. This is because it must be rounded from 2147483647 to 2147483648 to fit in a float and the rounded value is then converted exactly to a double. However, any int can be exactly converted into a double without rounding. So we are comparing 2147483648 to 2147483647.

Long.MAX_VALUE is rounded from 9223372036854775807 to 9223372036854775808 when converted to either a float or a double. The rounded value converts exactly from a float to a double, without further rounding. So Long.MAX_VALUE comes out the same, whether converted directly to a double or converted to a float and then to a double.

Please feel free to study the bit representations and compare them to whichever write-up on IEEE 754 floating point format you prefer. Or ask another question - someone is always in the Big Moose Saloon.

Mike

Rituparno Pal
Greenhorn

Joined: Oct 10, 2004
Posts: 12

posted

0

Dear Mike Thanks very much for you reply. That was real beauty to discover the bit n byte stuffs. Rituparno

I beleive you know that it's better to take 311-055 exam if you have 6-12 months of experience in Tiger.

I've been working with tiger since it's first beta release and I find the exam objectives challanging. [ January 05, 2005: Message edited by: Mohammed Al-Qaimari ]