質問です

cout.precision(17);
cout << .8F + .1F << endl; //Line a
cout << .8 + .1 << endl; //Line b

これを実行すると

0.90000003576278687
0.90000000000000002

と表示されるのですが0.900000000・・・とならないのは
Line aのほうはfloat型、Line bのほうはdouble型でメモリ上に確保されていて
確保していない領域まで表示してしまった結果と考えてよいのでしょうか?
まったく見当違いなことを言っていましたら、どなたかなぜ0.9000・・・・とならないのかご指導お願いできますか?
よろしくお願いします