c++ fab (long double)编译器警告

absolute value - C++ fabs(long double) compiler warning

本文关键字:编译器 警告 double long fab c++      更新时间:2023-10-16

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