2016-08-09 8 views
2

Я хочу иметь абсолютное значение long double.Предупреждение компилятора C++ fabs (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?

Edit:

std::abs в конечном счете, сделал работу. Однако std::fabs этого не сделал. Как отмечалось в комментариях, это может быть связано с несоответствующей реализацией.

+0

Вы проверили в публичных заголовках, если функция реализована, или вы только проверили документы? – JVApen

+0

Только документы, считая это стандартным. Видимо, я ошибся (?) – Stingery

+1

Может быть, попробуйте 'std :: fabs' или' std :: abs'? –

ответ

4

Согласно 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 перегрузки для вас.

+0

'std :: abs' работал, std :: fabs did not – Stingery