简体   繁体   中英

C++ fabs(long double) compiler warning

I want to have the absolute value of a long double .

According to <cmath> or <math.h> , the following is available:

     double fabs (double x);
     float fabs (float x);
     long double fabs (long double x);

However, when doing long double ld = fabs(static_cast<long double>(0)); , I get the following warning (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

How come?

What other ways are there to get the absolute value of a long double ?

Edit:

std::abs eventually did the job. However, std::fabs didn't. As was pointed out in the comments, this may be due to a non-conforming implementation.

According to cppreference http://en.cppreference.com/w/c/numeric/math/fabs and http://en.cppreference.com/w/cpp/numeric/math/fabs the C version of fabs in the global namespace only accepts a double argument and you would need to use fabsl . However std::fabs or std::abs should have the proper long double overloads for you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM