C++ fabs(long double) 编译器警告

C++ fabs(long double) compiler warning

我想要一个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 and http://en.cppreference.com/w/cpp/numeric/math/fabs,全局命名空间中 fabs 的 C 版本仅接受 double 参数,您需要使用 fabsl。但是 std::fabsstd::abs 应该有适合您的 long double 重载。