所以我有两个功能.一个函数检查给定的边是否形成一个直角三角形.问题是,当我在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)
浮点运算通常不会产生完全精确的结果,但会==检查是否完全相等.而不是比较a == b,使用abs( a - b ) < precision_limit.这基本上适用于所有语言的浮点运算.
这并没有解释为什么它会失败3, 4, 5,但似乎有很多代码你没有向我们展示.isRightTriangle打印它之前正在分析的数字是一个非常好的主意if.
(顺便说一句,现在我看到你正在传递整数pow.在这种情况下,不精确的结果只能发生在非常大的数字上,并且precision_limit至少会有一个.)
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |