执行此步骤时,实际上应该从If
else
的值
#include<stdio.h>
void main()
{
float a=0.9;
clrscr();
if(a<0.9)
printf("value from if a %f",a);
else
printf("value from else a %f",a);
getch();
}
上述代码的输出来自If。
只需检查以下代码,这将正确输出到其他部分
#include<stdio.h>
void main()
{
float a=0.8;
clrscr();
if(a<0.8)
printf("value from if a %f",a);
else
printf("value from else a %f",a);
getch();
}
上述代码的输出来自else
。
我试过0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9
0.7,0.9仅转到if
其他人转到else
。
请解释这种变化。
答案 0 :(得分:0)
根据IEEE格式,浮点存储为2的幂。这是浮点数比较的常见问题。
尝试添加.f
来更改代码#include<stdio.h>
void main()
{
float a=0.9f;
clrscr();
if(a<0.9f)
printf("value from if a %f",a);
else
printf("value from else a %f",a);
getch();
}
否则你需要有多少精确度来进行比较。您可以使用delta(const float delta = 0.000001;)并使用您的比较加/减该值。就像在页面上给出的那样:
http://www.softwareandfinance.com/CPP/FAQ_Floating_Point.html