Я хочу иметь абсолютное значение long double
,
В соответствии с <cmath>
или же <math.h>
доступно следующее:
double fabs (double x);
float fabs (float x);
long double fabs (long double x);
Однако при выполнении long double ld = fabs(static_cast<long double>(0));
Я получаю следующее предупреждение (LLVM 7.1):
Absolute value function 'fabs' given an argument of type 'long double' but has parameter of type 'double' which may cause truncation of value
Как так?
Какие есть еще способы получить абсолютное значение long double
?
Редактировать:
std::abs
в конце концов сделал работу. Тем не мение, std::fabs
не сделал. Как было указано в комментариях, это может быть связано с несоответствующей реализацией.
Согласно cppreference http://en.cppreference.com/w/c/numeric/math/fabs а также http://en.cppreference.com/w/cpp/numeric/math/fabs версия C fabs
в глобальном пространстве имен принимает только double
аргумент, и вам нужно будет использовать fabsl
, тем не мение std::fabs
или же std::abs
должен иметь надлежащее long double
перегрузки для вас.
Других решений пока нет …