Dziwny wynik działania matematycznego

0

Witam,
Zrobiłem sobie taką oto funkcję, obliczającą odległość między dwoma punktami w jakimś układzie współrzędnych (w tym przypadku między dwoma miastami):

...
#include <cmath>
...

int calculateDistanceBetweenCities(int x1, int y1, int x2, int y2)
{
    int result;
    result = abs(x1 - x2) + abs(y1 - y2);
    cout << "wynik funkcji: " << result << endl;
    return result;
}

Mam z nią pewien problem - kiedy umieściłem ją w swoim programie, działała w przypadku każdych danych wejściowych jakie sprawdziłem oprócz takiego zestawu (pokazuje wynik 1215446518):
x1 = 1; y1 = -2; x2 = -1; y2 = -3
Wtedy wyciąłem funkcję z programu i napisałem coś takiego:

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

int calculateDistanceBetweenCities(int x1, int y1, int x2, int y2)
{
    int result;
    result = abs(x1 - x2) + abs(y1 - y2);
    cout << "wynik funkcji: " << result << endl;
    return result;
}

int main() {
	cout << calculateDistanceBetweenCities(1, -2, -1, -3);
	return 0;
}

I tutaj mamy małego wtf'a, ponieważ wynik działania drugiego programu jest prawidłowy (3) :D Może mi ktoś wyjaśnić o co chodzi?

5

błąd leży poza kodem, który pokazałeś. Użyj debuggera by zlokalizować problem. Jak dla mnie wygląda to jak nieznacjonalizowana zmienna. Stawiam na jakąś durną literówkę, której się nie dostrzega. Zapewne jest użyta zła zmienna, albo jakaś zmienna jest niezainicjalizowana.

0

Ehhh.. Tak na początku uznałem, ale po około godzinie szukania błędu uznałem że nie dam dłużej rady :D Teraz udało mi się znaleźć, użyłem odwrotnie dwóch zmiennych o podobnych nazwach.

[EDIT]: A jednak tylko mi się wydawało... Było dobrze. Chyba jestem zbyt zmęczony, lepiej odłożę to na później ;p

0

No faktycznie śpisz. Bo to:

gogolon napisał(a):
result = abs(x1 - x2) + abs(y1 - y2);

nie jest poprawny sposób obliczania odległości w układzie kartezjańskim (pogubione kwadraty).

1 użytkowników online, w tym zalogowanych: 0, gości: 1