Неправильно вычисляю выражение

133
07 мая 2019, 09:30

В общем в одном из алгоритмов потребовалось вычислять квадратный корень из суммы квадратов двух аргументов. Казалось бы, всё просто и я написал std::sqrt(std::pow(x,2)+std::pow(y,2)), но чуть позже оказалось что некоторые тесты не проходят из-за этого вычесления (протрейсил и в этой строке получаются странные значения). Насколько я понял проблема в том что std::pow(x,2) превышает максимальное значение для типа x. Но ведь у результата будут брать корень и он станет снова маленьким? Как быть чтобы работало? Может есть какой-то другой алгоритм для вычисления выражения этого?

Answer 1

Попробуйте hypot - она работает медленнее, но зато лишена описываемого вами недостатка.

И - ну уж хотя бы для возведения в квадрат я бы не стал пользоваться функцией pow... Неужели x*x длиннее std::pow(x,2), если уж даже не рассматривать все остальные недостатки...

READ ALSO
Перевести вектор в строку

Перевести вектор в строку

Как правильно перевести std::vector<int> в std::string? То есть например для вектора 1,2,3,4,5 должна быть строка 12345 на выходе

128
Проблема с регуляркой

Проблема с регуляркой

Есть регулярное выражение:

133
Включение библиотек в проект cmake

Включение библиотек в проект cmake

Осваиваю cmake и столкнулся вот с какой проблемой: У меня есть три папки с написанными мною статическими библиотекамиНазовем их a, b и c

148
Ошибка при работе с вектором std::bad_alloc

Ошибка при работе с вектором std::bad_alloc

Из-за чего такая ошибка? И как её исправить?

138