Я должен проверить неравенство, содержащее квадратные корни. Чтобы избежать неправильных результатов из-за неточности и округления с плавающей запятой, я использую std::nextafter()
для получения верхней/нижней границы:
#include <cfloat> // DBL_MAX
#include <cmath> // std::nextafter, std::sqrt
double x = 42.0; //just an example number
double y = std::nextafter(std::sqrt(x), DBL_MAX);
a) Гарантируется ли y*y >= x
с использованием компилятора GCC?
b) Будет ли это работать для других операций, таких как + - * /
или даже std::cos()
и std::acos()
?
c) Есть ли лучшие способы получить верхнюю/нижнюю границы?
Обновление: I читать, это не гарантируется стандартом С++, но должно работать в соответствии с IEEE-754. Будет ли это работать с компилятором GCC?