Velocity Reviews > Java > Floating Point Representation (Question)

# Floating Point Representation (Question)

Stefan Ram
Guest
Posts: n/a

 12-26-2012
AFAIK 0.1 in hex is 0x1.(9)ap-4, where »(9)« means an
infinite sequence of »9«. However, Java only stores a
finite number of 9s:

printf( "%a%n", 0.1 )
0x1.999999999999ap-4

. So, since something /positive/ is missing, Javas
representation of 0.1 should be /smaller/ than 0.1, but

println( new java.math.BigDecimal( 0.1 ))
0.100000000000000005551115123125782702118158340454 1015625

shows me a value that is /greater/ than 0.1?

Removing more 9s makes the value even larger!

println( new java.math.BigDecimal( 0x1.999999999999ap-4 ));
0.100000000000000005551115123125782702118158340454 1015625

println( new java.math.BigDecimal( 0x1.9ap-4 ))
0.10009765625

Stefan Ram
Guest
Posts: n/a

 12-26-2012
Patricia Shanahan <(E-Mail Removed)> writes:
>The "a" in "0x1.999999999999ap-4" is the last digit of the hex fraction.

For some reason, I did not understand this, but thought »ap«
was a unit marking the start of the exponent (already
wondering »Why /two/ letters?«). Now that you have told me
this, I understand it all - thank you!

Eric Sosman
Guest
Posts: n/a

 12-26-2012
On 12/26/2012 11:22 AM, Stefan Ram wrote:
> AFAIK 0.1 in hex is 0x1.(9)ap-4, where »(9)« means an
> infinite sequence of »9«.

What's the "a" for?

> However, Java only stores a
> finite number of 9s:
>
> printf( "%a%n", 0.1 )
> 0x1.999999999999ap-4

"One, point, twelve nines, A, exponent." See the "A?"

--
Eric Sosman
http://www.velocityreviews.com/forums/(E-Mail Removed)d