キャストとforを使って1から10までの値を0.1刻みで順に表示するプログラムを作れという
練習問題の解答が以下として載っていたのですが…

#include <stdio.h>

int main(void)
{
float f;

for(f=1.0; (int) f<= 9; f=f + 0.1)
printf("%f ", f);

return 0;
}

これを実行すると、
1.000000 1.100000 1.200000 1.300000 1.400000 1.500000 1.600000 1.700000
1.800000 1.900000 2.000000 2.100000 2.200000 2.300000 2.400000 2.500000
2.600000 2.700000 2.799999 2.899999 2.999999 3.099999 3.199999 3.299999
3.399999 3.499999 3.599999 3.699999 3.799999 3.899998 3.999998 4.099998
4.199998 4.299998 4.399998 4.499998 4.599998 4.699998 4.799998 4.899998
4.999998 5.099998 5.199997 5.299997 5.399997 5.499997 5.599997 5.699997
5.799997 5.899997 5.999997 6.099997 6.199996 6.299996 6.399996 6.499996
6.599996 6.699996 6.799996 6.899996 6.999996 7.099996 7.199996 7.299995
7.399995 7.499995 7.599995 7.699995 7.799995 7.899995 7.999995 8.099995
8.199995 8.299995 8.399996 8.499996 8.599997 8.699997 8.799997 8.899998
8.999998 9.099998 9.199999 9.299999 9.400000 9.500000 9.600000 9.700001
9.800001 9.900002

と、なんか途中から誤差が出てくるんですが、どうしてでしょうか?