0

だから私は2つの機能を持っています。1 つの関数は、指定された辺が直角三角形を形成するかどうかを確認します。問題は、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";
}
4

2 に答える 2

8

浮動小数点演算は通常、完全に正確な結果を生成するわけではありませんが、完全に==等しいかどうかをチェックします。を比較する代わりにa == b、を使用しますabs( a - b ) < precision_limit。これは基本的に、すべての言語の浮動小数点演算に当てはまります。

これはなぜ失敗するのかを説明していませんが3, 4, 5、あなたが私たちに見せていないコードがたくさんあるようです. isRightTriangle分析する数値をif.

(ちなみに、整数を に渡していることがわかりましたpow。この場合、不正確な結果は非常に大きな数の場合にのみ発生する可能性がprecision_limitあり、少なくとも 1 になります。)

于 2013-08-02T01:07:36.723 に答える