【问题标题】:C++ fabs(long double) compiler warningC++ fabs(long double) 编译器警告
【发布时间】: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::fabsstd::abs
  • 据我所知,只有<cmath> 需要long double fabs (long double x);。如果包括 <cmath> 和使用 std::fabs 不起作用,那么您的实现不符合要求。
  • 这真的很酷。通常人们会发布关于潜伏在代码中的using namespace std; 所导致的相反结果的令人惊讶的后果。

标签: c++ absolute-value long-double


【解决方案1】:

根据cppreference http://en.cppreference.com/w/c/numeric/math/fabshttp://en.cppreference.com/w/cpp/numeric/math/fabs,全局命名空间中fabs 的C 版本只接受double 参数,您需要使用fabsl。但是 std::fabsstd::abs 应该有适合您的 long double 重载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多