计算毕达哥拉斯定理的代码

时间:2017-10-18 20:43:28

标签: c++

我正在使用C ++进行作业。基本上我采取两个方面,假设他们的较小的一面或斜边,然后使用函数吐出剩余的一面。看起来很简单,我99%肯定我的数学是正确的功能部分,但我不断得到奇怪的大答案。

#include<iostream>
#include<cmath>
using namespace std;

double otherSideLength(double, double);

int main() {
   double a_small_side;
   double hypotenuse;
   double swapStore = 0;
   double otherSide = 0;
   cin >> a_small_side;
   cin >> hypotenuse;
   if(a_small_side == hypotenuse){
      cout << "ERROR" << endl;
      cout << "0";
   }
   if(a_small_side < hypotenuse){
      otherSide = otherSideLength(a_small_side, hypotenuse);
      cout << otherSide;
   }
   if(a_small_side > hypotenuse){
      swapStore = a_small_side;
      a_small_side = hypotenuse;
      hypotenuse = swapStore;
      otherSide = otherSideLength(a_small_side, hypotenuse);
      cout << otherSide;
   }
}

double otherSideLength(double a_small_side, double hypotenuse){
   //a^2+b^2=c^2,
   //b^2 = c^2 + a^2
   //b = sqrt(c^2 + a^2)
double b = sqrt(pow(hypotenuse, 2) + pow(a_small_side, 2));
return b;
}

如果有人想快速浏览一下,那就太棒了。

2 个答案:

答案 0 :(得分:2)

我认为你有一个标志错误。

如果你检查你的代数,你会发现

a ^ 2 + b ^ 2 = c ^ 2

装置

b ^ 2 = c ^ 2 - a ^ 2.

答案 1 :(得分:2)

除了在Drist的答案中已经发现的正确代数公式之外,你的代码中还存在一些问题。

例如,通常将浮点数与简单x == y进行比较是错误的。最好使用一种与容差的“模糊”比较。

此外,计算毕达哥拉斯定理简单地应用经典数学公式是容易出错的,如平方,例如a*a可能会溢出。描述了一种更好的方法here

假设c是斜边(c > a),您可以这样做:

// b = sqrt(c*c - a*a);
double r = a / c;
double b = c * sqrt(1.0 - r*r);