我正在用C ++编写一个用于距离公式的程序。 x1 = 0 y1 = 0 x2 = 1 y2 = 1的答案应该是1.14左右,但打印出来的答案是2.00。每个变量都存储为double我不知道这里出了什么问题。这是我的代码,谢谢你的帮助!!
// main.cpp
// Chap6_42
//
// Created on 10/21/14.
//
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double distance(double,double,double,double); //distance prototype
int main()
{
double d = 0;
double x1 = 0; //coordinate x1
double x2 = 0; //coord x2
double y1 = 0; //coord y1
double y2 = 0; //coord y2
cout << "Enter four cords (x1,y1,x2,y2) to find the distance between them " << endl;
cout << "x1 = ";
cin >> x1;
cout << "y1 = ";
cin >> y1;
cout << "x2 = ";
cin >> x2;
cout << "y2 = ";
cin >> y2;
d = distance (x2,x1, y2,y1); //calls to distance function, performs computations
cout << "The distance is " << fixed << setprecision(2) << showpoint << d << endl;
return 0;
}
double distance(double x2,double x1,double y2,double y1) //distance function header
{
return sqrt(pow(x2-x1,2.0)) + sqrt(pow(y2-y1,2.0)); //distance function computations
}
//function definition
答案 0 :(得分:2)
为什么你认为答案是1.14左右?举个例子,它应该返回2.0
sqrt((pow(2.0 - 1.0, 2.0))) + sqrt((pow(2.0 - 1.0, 2.0)))
sqrt((pow(1.0, 2.0))) + sqrt((pow(1.0, 2.0)))
sqrt(1.0) + sqrt(1.0)
1.0 + 1.0
2.0
多田!
如果您正在计算函数名称所暗示的距离,则需要调整公式。
return sqrt(pow(abs(x2 - x1), 2.0) + pow(abs(y2 - y1), 2.0));
答案 1 :(得分:2)
你的计算错了。您只需拨打sqrt
两次,只需在整个金额上拨打一次。
return sqrt(pow(x2-x1,2.0) + pow(y2-y1,2.0));
答案 2 :(得分:2)
你的公式错了。
您写道:
sqrt(pow(x2-x1,2.0)) + sqrt(pow(y2-y1,2.0));
应该是:
sqrt(pow(x2-x1,2.0) + pow(y2-y1,2.0));
无论如何,不要在那里使用pow
,而是手动繁殖,这可能(可能)更快,更准确。
sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );
此外,通常您可以使用平方距离而不是距离来进行小的性能提升。
答案 3 :(得分:1)
你和pythagorus不同意如何计算距离
答案 4 :(得分:-1)
鉴于您打算使用“pow”出于某种深奥的原因,您的代码应该是
return sqrt(abs(pow(x2-x1,2.0)) + abs(pow(y2-y1,2.0)));
或
return sqrt(pow(x2-x1,int(2)) + pow(y2-y1,int(2)));
如果你要编程,你可能需要大量的数学。你需要知道你将要使用的算法(即使是像Pitagora那样的简单算法)。另外一个带有双精度的舍入误差也不会改变结果(除非你使用了一些糟糕的条件算法,但Pitagora的情况并非如此。