计算距离,但结果是 - 2147483648

Calculating distances but the result is - 2147483648

本文关键字:2147483648 结果是 距离 计算      更新时间:2023-10-16

下面是计算距离的代码

// creating array of cities
double x[] = {21.0,12.0,15.0,3.0,7.0,30.0};
double y[] = {17.0,10.0,4.0,2.0,3.0,1.0};
// distance function - C = sqrt of A squared + B squared

一个问题是运算顺序把你搞砸了(乘法是在减法之前完成的(

改变

(x[c1] - x[c2] * x[c1] - x[c2]) + (y[c1] - y[c2] * y[c1] - y[c2])

((x[c1] - x[c2]) * (x[c1] - x[c2])) + ((y[c1] - y[c2]) * (y[c1] - y[c2]))

为了清楚起见,我还建议在单独的行上进行一些计算(显然这是我更喜欢的风格选择,我相信有些人会不同意(。 不过,它对编译器应该没有区别

double deltaX = x[c1] - x[c2];
double deltaY = y[c1] - y[c2];
double distance = sqrt(deltaX * deltaX + deltaY * deltaY);

在我看来,这使得代码更易于维护(并且更不容易出错,就像在这种情况下一样(。 请注意,重写后,操作顺序不需要额外的括号。

记住运算符优先级:a - b * c - d表示a - (b * c) - d

你想要吗

(x[c1] - (x[c2] * x[c1]) - x[c2])

((x[c1] - x[c2]) * (x[c1] - x[c2]))

(x[c1] - x[c2] * x[c1] - x[c2])将类似于(x[c1] - (x[c2] * x[c1]) - x[c2]),因为*的优先级高于-

我将继续解决几个问题:

 // creating array of cities
double x[] = {21.0,12.0,15.0,3.0,7.0,30.0};
double y[] = {17.0,10.0,4.0,2.0,3.0,1.0};
// distance function - C = sqrt of A squared + B squared
double dist(int c1, int c2) {
   double z = sqrt (
        ((x[c1] - x[c2]) * (x[c1] - x[c2])) + ((y[c1] - y[c2]) * (y[c1] - y[c2])));
   return z;
}  
void main()
{
  int a[] = {1, 2, 3, 4, 5, 6};
  execute(a, 0, sizeof(a)/sizeof(int));

    int  x;
    printf("Type in a number n");
    scanf("%d", &x);

    int  y;
    printf("Type in a number n");
    scanf("%d", &y);
 double z = dist (x,y);
 cout << "The result is " << z;
}

这将修复未使用的返回值,并修复操作顺序和不正确的 int 变量类型。