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::fabs
或 std::abs
应该有适合您的 long double
重载。
我想要一个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::fabs
或 std::abs
应该有适合您的 long double
重载。