Mysterious Number Precision Error

Try this:

var num:Number = 1;

num -= 0.2
trace( num );

num -= 0.2
trace( num );

num -= 0.2
trace( num );

num -= 0.2
trace( num );

num -= 0.2
trace( num );

num -= 0.2
trace( num );

It will output this:

0.8
0.6000000000000001
0.4000000000000001
0.20000000000000007
5.551115123125783e-17
-0.19999999999999996

Do you have any logical explanation about that???