Вот как самому разобраться в подобных вещах или, по крайней мере, приблизиться к хорошему вопросу StackOverflow:
Вы знаете, что проблема в вызове sqrt()
.Итак, как это называется?В этом случае вы можете отследить вычисления вручную:
int xdiff = P2.getX()-this->getX(); // this is 0 - 0, which is 0.
int ydiff = P2.getY()-this->getY(); // this is 1 - 0, which is 1.
xdiff = xdiff*xdiff; // this is still 0.
ydiff = ydiff*ydiff; // this is still 1.
double retval = sqrt((xdiff) - (ydiff)); // this is sqrt(0 - 1), or sqrt(-1).
Альтернативно, в более сложных случаях - и для проверки своей работы вы можете использовать отладчик для распечатки значений аргументов,или вы можете вставить операторы печати:
xdiff = xdiff*xdiff;
ydiff = ydiff*ydiff;
cout << 'xdiff: ' << xdiff << ' ydiff: ' << ydiff << endl
cout << 'computing sqrt(' << xdiff - ydiff << ')' << endl
double retval = sqrt((xdiff) - (ydiff));
В любом случае, теперь вы знаете, что вы вычисляете sqrt(-1)
, и вы можете попробовать запустить его напрямую, чтобы подтвердить, что он действительно дает тот же результат.Итак, у вас есть вопрос "Почему sqrt(-1)
возвращает NaN
?"или вопрос «Почему мой расчет расстояния пытается вычислить квадратный корень из отрицательного числа?»
Надеюсь, вы уже знаете ответ на первый вопрос, а второй вопрос должен указывать, что вам нужно удвоить-проверьте формулу расстояния, которая должна была довольно быстро показать вам ответ - но даже если вы не можете понять, почему он это делает, он, по крайней мере, задает более полезный вопрос здесь.