Floating Point Representation (Question)

S

Stefan Ram

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.1000000000000000055511151231257827021181583404541015625

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.1000000000000000055511151231257827021181583404541015625

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

Stefan Ram

Patricia Shanahan said:
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!
 
E

Eric Sosman

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?"
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top