关于浮点数的加法有关问题

关于浮点数的加法问题
代码如下:

#include <stdio.h>
int main()
{
float f=0.0f;
int i;
for(i=0;i<10;i++)
{
f = f + 0.1f;
printf("%d : %.7f\n",i,f);
}
getch();
return 0;
}

执行结果如下:
关于浮点数的加法有关问题
我想知道后面的0.0000001是从哪儿来的?结果为什么不是1?还有,当我把精度设置为%.8f时,有多了一位不确定值,这到底是怎么回事呀?为什么浮点数的加法这么诡异呢?0.0加上十次0.1后,居然不是1?求高手给我这个菜鸟指点一下,谢谢!
c float

------解决方案--------------------
浮点数不能精确表示0.1,因此会有误差,具体可查看iee754
------解决方案--------------------
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。