float値を比較すると予期せぬ動作が起こりますが、浮動小数点では問題が四捨五入される可能性がありますが、浮動小数点値を比較すると予期せぬ動作が発生する
#include <stdio.h>
int main()
{
float alpha = 0.0f;
int finish = 0;
while (finish == 0)
{
alpha += 0.05f;
if (alpha > 1.0f)
{
printf("%f", alpha); // Expected result: 1.05f, actual result: 1.0f
finish = 1;
}
}
return 0;
}
実際には、α= 1.0fのときに条件が入ります。その動作を理解できません...
私はMinGW(GCC 5.3.0)をWindows 10(32ビットと64ビットでテスト済み)、Intel i5プロセッサでコンパイルしています。
'printf("%。7f \ n "、alpha);')のように 'alpha 'を印刷すると、すぐに問題が表示されます:http://ideone.com/zwQW7e 。 –
0.05fの定数が0.05を正確に表す無限のビットストリームよりわずかに小さいかわずかに大きいかどうかを知る必要があります。おそらく、それは少し大きめです。 –
これをチェックしてください(これは私の答えを作るために使ったものです):http://www.exploringbinary.com/floating-point-converter/ – Bathsheba