首页 > 解决方案 > if( c == (int) c) 是什么意思?

问题描述

这是毕达哥拉斯三元组的代码。有人可以解释if下面语句的工作原理。

int main()
{
    int a, b;
    float c;

    //calculate the another side using Pythagoras Theorem
    //a*a + b*b = c*c
    //c = sqrt(a*a+b*b)
    //maximum length should be equal to 30
    for(a=1;a<=30;a++)
    {
        for(b=1;b<=30;b++)
        {
            c = sqrt(a*a+b*b);
            if(c == (int)c)
            {
                printf("(%d, %d, %d)\n",a,b,(int)c);
            }
        }
    }
}

标签: c++if-statement

解决方案


此 if 语句不必工作,因为处理器中的浮点(float,double等)表示不同于整数(int,char等)。因此,在一般情况下,这种算子是错误的。

浮点数有时不可能精确地表示为整数(尤其是作为某种计算的结果)(参见wiki和这个问题),并且整数总是精确地表示。

在您的情况下,使 if 语句正确的一种方法是这样编写:

if (fabs(c - roundf(c)) < eps) {
    ...
}

哪里eps需要精度。例如,

float eps = 1e-12;  // 10^(-12)

推荐阅读