It's an old bug, that I discovered some years ago yet, but until these days, some people ask about it.
To understand that, just try this code and look at the output:
class Test
{
    static function main()
    {
        var i = 0.0;
        flash.Lib.current.onEnterFrame = function()
        {
            i += 0.01;
            trace( i );
        }
    }
}
It's a haXe code, but all that you have to do is a loop that adds 0.01 to your initial variable set to 0
You'll se something like:
0.01
0.02
0.03
...
0.78
0.79
0.8000000000000001
0.81
0.82
0.83
0.8400000000000001
0.8500000000000001
0.86
...
Don't ask me why, but when you know that, you understand some weired things that could occur in your SWF, maybe in the past.
That's also a good reason to be careful with some test cases like if ( a == b ){...} that you have to replace with something like if ( Math.abs( a - b ) < limit ){...}, where limit is something near 0...to prevent weired behaviour :)
As Mickro said it in the comment, it occurs in many other languages too. Better is to work with integers and at the end parse it to floats.