C++ fabs(long double) 编译器警告
Posted
技术标签:
【中文标题】C++ fabs(long double) 编译器警告【英文标题】:C++ fabs(long double) compiler warning 【发布时间】:2016-08-09 18:23:12 【问题描述】:我想要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
没有。正如 cmets 中所指出的,这可能是由于实施不符合规定。
【问题讨论】:
您是否在公共标头中验证了该功能是否已实现,还是您只检查了文档? 只有文档,假设这是标准的。显然,我错了(?) 也许可以试试std::fabs
或std::abs
?
据我所知,只有<cmath>
需要long double fabs (long double x);
。如果包括 <cmath>
和使用 std::fabs
不起作用,那么您的实现不符合要求。
这真的很酷。通常人们会发布关于潜伏在代码中的using namespace std;
所导致的相反结果的令人惊讶的后果。
【参考方案1】:
根据cppreference http://en.cppreference.com/w/c/numeric/math/fabs 和http://en.cppreference.com/w/cpp/numeric/math/fabs,全局命名空间中fabs
的C 版本只接受double
参数,您需要使用fabsl
。但是 std::fabs
或 std::abs
应该有适合您的 long double
重载。
【讨论】:
以上是关于C++ fabs(long double) 编译器警告的主要内容,如果未能解决你的问题,请参考以下文章