在这种情况下浮动值如何工作?

时间:2021-07-09 19:52:48

标签: c++ floating-point

if ((A < (float)(B+C)) && (B < (float)(A+C)) && (C < (float)(B+A)))

在这一行中, A<(float)(B+C)..... 其余相同的条件都适用。但我无法理解里面发生了什么。谁能解释一下?为什么要写“(float)(B+C)。”这是只读取小数点后的值吗???谁能解释一下!!

编辑:我用它来计算三角形的周长。

#include <iostream>
#include <iomanip> 
using namespace std;
 
int main() {
 
    
    float a,b,c;
    cin>>a>>b>>c;
    
    if(a<(float)(b+c) && b< (float)(a+c) && c < (float)(b+c))
    {
     float perimeter = a+b+c;
     cout<<"Perimetro = "<<fixed<<setprecision(1)<<perimeter<<endl;
    }
    else 
    {
        float area = 0.5 *(a+b)*c;
        cout<<"Area = "<<fixed<<setprecision(1)<<area<<endl;
    }
    
    return 0;
}

1 个答案:

答案 0 :(得分:2)

(float) 中的强制转换 (float)(b+c) 的唯一效果是丢弃”加法中使用的多余精度,确保结果是实际的 float 值。 (C++ 标准允许评估 float 表达式,就好像它们是 double 或以其他方式具有更高的精度。)在代码中没有明显的原因。事实上,它引入了额外的计算错误,可能会使结果更糟。

可以在不影响程序的情况下删除三个演员表。但是,请注意第三个比较有一个错字; c < (float)(b+c) 应该是 c < (float)(b+a)

总而言之,if 条件测试 abc 是否是三角形边的有效长度。鉴于此,我们希望 else 子句报告它们不是。相反,它旨在计算和报告一个区域。这没有多大意义。