c++中1.1+2.2不等于3.3

做判断三角形的题时候发现输入1.1 2.2 3.3的时候,会判断为是三角形且输出面积为0.0,很迷茫,就各位帮忙简答。

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
    double a, b, c, s, area;
    while(cin>>a>>b>>c){
        if (((a+b)<=c)||((b+c)<=a)||((c+a)<=b)){
            cout<<"Error"<<endl;
        }else{
            s=(a+b+c)/2;
            area=sqrt(s*(s-a)*(s-b)*(s-c));
            cout<<setiosflags(ios::fixed)<<setprecision(2)<<area<<endl;
        }
    }

    return 0;
}

输出结果

img

浮点数判断等于如果直接用=符号是有风险的。应该考虑两者的差的绝对值小于一个极小数
float f = 0.00001
if(fabs(a+b-c) < f)
printf("a+b等于c");

三角形不是任意两边之和大于第三边,任意两边之差小于第三边。你这里是小于等于。