當比較浮點值時,我收到了意想不到的行爲,我知道浮點數可能具有舍入精度問題,但這裏的數字對於提出這些問題非常具體。C編碼,比較浮點值時的意外行爲
#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;
}
實際上,當alpha = 1.0f時條件進入。無法理解的行爲...
我在Windows 10(在32位和64位測試),Intel i5處理器上與MinGW(GCC 5.3.0)編譯。
如果您要打印含有更多有效數字的'alpha'(例如'printf(「%。7f \ n」,alpha);'),那麼您會立即看到問題:http://ideone.com/zwQW7e 。 –
您必須知道0.05f的常量是否略小或略大於無限比特流,它將完全代表0.05。據推測,它稍大。 –
檢查了這個(這是我用來建立我的答案):http://www.exploringbinary.com/floating-point-converter/ – Bathsheba