Walead Libya
Walead Libya

Reputation: 31

Calculating distances but the result is - 2147483648

Below is the code to calculate the distance

// 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

Upvotes: 0

Views: 242

Answers (4)

jzworkman
jzworkman

Reputation: 2703

I am going to go ahead and fix a couple of issues:

 // 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;
}

This fixes the unused return value, and also fixes the order of operation, and incorrect variable type of int.

Upvotes: 0

phoxis
phoxis

Reputation: 61990

Do you want

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

or

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

(x[c1] - x[c2] * x[c1] - x[c2]) will be similar to (x[c1] - (x[c2] * x[c1]) - x[c2]) because * has higher precedence than -.

Upvotes: 0

Eric J.
Eric J.

Reputation: 150228

One issue is that the order of operations is messing you up (multiplication is done before subtraction)

Change

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

to

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

I would also recommend, just for clarity, doing some of those calculations on separate lines (clearly that's a style choice that I prefer, and I'm sure some would disagree). It should make no difference to the compiler though

double deltaX = x[c1] - x[c2];
double deltaY = y[c1] - y[c2];

double distance = sqrt(deltaX * deltaX + deltaY * deltaY);

In my opinion that makes for more maintainable (and less error prone, as in this instance) code. Note that, as rewritten, the order of operations does not require extra parentheses.

Upvotes: 4

ruakh
ruakh

Reputation: 183602

Remember operator precedence: a - b * c - d means a - (b * c) - d.

Upvotes: 0

Related Questions