Endless for loop with float
Asked Answered
M

1

3

Consider the following code:

for (float i = 0f; i < int.MaxValue; i++)
{
    // Some code
}

Which is supposed to loop from 0 to int.MaxValue (231-1), but it doesn't. Once i reached 224, i++ doesn't work anymore for a reason that I'm totally unable to understand.

In the Immediate Window of VS I've try this:

>i
16777216.0
>i + 1
16777216.0 // ???
>i == i + 1
false // as expected, but a lack of consistency with upper statement
>i + 2
16777218.0

Why does it behave like so? What is special with 224+1?

Muco answered 6/4, 2016 at 7:35 Comment(0)
W
13

It is because of float precision. It is based on IEEE Standard for Floating-Point Arithmetic (IEEE 754). Read it to understand how floating point works.

In simple words when a float stores a large value in itself; the difference between currently stored number and the next number it can store, is larger than 1 so adding 1 to it does not increase it's value.

If you need exact decimal number use decimal instead.
If you need integral value larger than int then use long.
If you need very large integral values then use BigInteger.

Wojak answered 6/4, 2016 at 7:38 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.