if-else语句行为不正确

Amb*_*nna 0 c++ if-statement

所以我有两个功能.一个函数检查给定的边是否形成一个直角三角形.问题是,当我在classify中的if-else语句中调用函数时,即使isRightTriangle(sides)的值为true,我总是得到"Not a right Triangle".

bool isRightTriangle(int sides[])
{
    std::sort(sides, sides+3);

    if((pow(sides[0],2) + pow(sides[1],2)) == pow(sides[2],2))
        return true;
    return false;
}

void classify(int sides[], ofstream &outfile)
{
    int largest(int []);
    void typeOfTriangle(int [], ofstream &);
    bool isRightTriangle(int []);

    outfile << "Largest Side: " << largest(sides) << endl;
    typeOfTriangle(sides,outfile);

    if(isRightTriangle(sides))
        outfile << "Right Triangle\n\n\n";
    else
        outfile << "Not a Right Triangle\n\n\n";
}
Run Code Online (Sandbox Code Playgroud)

Pot*_*ter 8

浮点运算通常不会产生完全精确的结果,但会==检查是否完全相等.而不是比较a == b,使用abs( a - b ) < precision_limit.这基本上适用于所有语言的浮点运算.

这并没有解释为什么它会失败3, 4, 5,但似乎有很多代码你没有向我们展示.isRightTriangle打印它之前正在分析的数字是一个非常好的主意if.

(顺便说一句,现在我看到你正在传递整数pow.在这种情况下,不精确的结果只能发生在非常大的数字上,并且precision_limit至少会有一个.)

  • @RobertHarvey因为"一般不会"并不意味着"永远不会". (3认同)