forループが5回実行され、コードを読むときに "計算された"のではない理由がわかりません。なぜfor-loopが5回で4回でないのかわからない
float a;
int i = 0;
for(a = 0.01; a < 100; a *= 10)
i++;
cout << i << endl;
私の考え: 第四は、a
の値を実行した後ループのための100のよう がcout << i
の出力を与え、100(a < 100
)より小さいない「ブレーク」する必要があることで、100
です4
でなければなりません。
100 < 100
(
a < 100
)を通過して、第5回実行した後
a
が1000に等しく、ない100
"科学者が浮動小数点について知っておくべきこと"を読んでください。しかし基本的に、浮動小数点数は、基数の累乗でスケーリングされた小数部として表されます(数値システムの基数)。つまり、限られた値の集合しか表現できません。たとえば、ほとんどすべての現代のコンピュータでは、基数2を使用しているため、浮動小数点値として表現することはできません。 –
このような問題が発生すると、インデックス変数(a)を出力して何が起こるかを確認するのに役立ちます。他の言われているように、おそらく浮動小数点精度の問題です。 – Radu
'cout << a << endl;'をループに追加すると、問題が見えます。 –