【发布时间】: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;所导致的相反结果的令人惊讶的后果。
标签: c++ absolute-value long-double