Power и Square Root не работают с assert () в C ++ - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть две функции, показанные здесь: https://pastebin.com/QWQ6yH6u

// main() calls both findDistance() and test() correctly so they don't need to be shown.
// Note: This is only a section of the full code as it is the only relevant part.

double findDistance(float x1, float y1, float x2, float y2) {
    double distanceTotal = sqrt( pow( 2, (x2-x1) ) + pow( 2, (y2-y1) )); // This line doesn't work with assert values.
    //double distanceTotal = (x2-x1) + (y2-y1); // This line works with assert values.
    return distanceTotal;
}

void test() {
    assert(findDistance(4, 3, 5, 1) - 2.23607 <= epsilon);
    assert(findDistance(2, 4, 2, 4) <= 1.00);
    assert(findDistance(4, 4, 4, 4) <= 1.00);

    cout << "all tests passed..." << endl;
}

Функция findDistance находит расстояние между двумя точками (x1, y1), (x2, y2). Одна строка корректно работает со значениями assert (), а строка с квадратными корнями и степенями - нет. Что не так со строкой 5?

Код успешно компилируется с использованием http://cpp.sh, а результат с текущим кодом:

Do you want to run the program? (y/n) y
Program calculates distance between 2 points on a 2D coordinates.
Enter a point in the form (x, y): (3,3)
(x1, y1) = (3.00, 3.00) 
Enter a second point in the form (x, y): (1,1)
(x2, y2) = (1.00, 1.00) 

Я уже проверил следующие сообщения: 1. Как рассчитать мощность в C 2. Линия квадратного корня не работает 3. Ошибка функции квадратного корня C ++

1 Ответ

0 голосов
/ 16 сентября 2018

Ошибка связана с неправильным использованием std::pow().Это должно работать намного лучше:

double distanceTotal = sqrt( pow( (x2-x1),2 ) + pow( (y2-y1), 2 )); // This line doesn't work with assert values.

Демо онлайн

...