Question: Java Infinite while Loop - float 123456789


Java Infinite while Loop - float 123456789

Answers 1
Added at 2017-01-01 11:01

I am currently learnig java float-point numbers. I know, that a float have a specific amount of significant digets. I also know, that a float is represented in java like -1 or 1 * num * 10^x. Where num is the numer and 10^x is the decimal "point". But here we do not have a fraction of a number. How is a infinite loop here possible?

The code with infinite loop:

float f = 123456789;
while (f-- > 0) {
nr: #1 dodano: 2017-01-01 11:01

It's about floating point arithmetic. When you're decrementing the number you stumble upon the situation when you go through the number f = 1.23456792E8 makes everything go wrong, because f-1 and f have the same floating point representation here. So decrementing makes the number be itself, which leads to the infinite loop. Just check:

System.out.println(1.23456792E8f - 1);

What is so special about the number and why execution stops there? It's because the floating point representation of 123456789 is 1.23456792E8. Already this gives us a gap of at least 3 due to the lack of precision of floating point numbers. Using double instead of float makes the program finish, but the issue will occur with higher numbers.

Source Show
◀ Wstecz